Android
MediaSession
Szukaj…
Składnia
- void mediaSessionCompat.setFlags (int flagi)
- void mediaSessionCompat.setMediaButtonReceiver (PendingIntent mbr)
- void mediaSessionCompat.setCallback (wywołanie zwrotne MediaSessionCompat.Callback)
- void mediaSessionCompat.setActive (boolean active)
- MediaSessionCompat.Token mediaSessionCompat.getSessionToken ()
- void mediaSessionCompat.release ()
- void mediaSessionCompat.setPlaybackState (stan PlaybackStateCompat)
- void mediaSessionCompat.setMetadata (metadane MediaMetadataCompat)
Uwagi
Aby uzyskać najlepszą praktykę, skorzystaj z biblioteki kompatybilnej z mediami . Biblioteka dba o kompatybilność wsteczną, tłumacząc metody sesji medialnej na równoważne metody na starszych wersjach platformy, jeśli są dostępne.
Odbieranie i obsługa zdarzeń przycisków
Ten przykład tworzy MediaSession
obiektu, gdy Service
jest uruchamiany. Obiekt MediaSession
jest zwalniany, gdy Service
zostanie zniszczona:
public final class MyService extends Service {
private static MediaSession s_mediaSession;
@Override
public void onCreate() {
// Instantiate new MediaSession object.
configureMediaSession();
}
@Override
public void onDestroy() {
if (s_mediaSession != null)
s_mediaSession.release();
}
}
Poniższa metoda MediaSession
instancję i konfiguruje wywołania zwrotne przycisku MediaSession
:
private void configureMediaSession {
s_mediaSession = new MediaSession(this, "MyMediaSession");
// Overridden methods in the MediaSession.Callback class.
s_mediaSession.setCallback(new MediaSession.Callback() {
@Override
public boolean onMediaButtonEvent(Intent mediaButtonIntent) {
Log.d(TAG, "onMediaButtonEvent called: " + mediaButtonIntent);
KeyEvent ke = mediaButtonIntent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);
if (ke != null && ke.getAction() == KeyEvent.ACTION_DOWN) {
int keyCode = ke.getKeyCode();
Log.d(TAG, "onMediaButtonEvent Received command: " + ke);
}
return super.onMediaButtonEvent(mediaButtonIntent);
}
@Override
public void onSkipToNext() {
Log.d(TAG, "onSkipToNext called (media button pressed)");
Toast.makeText(getApplicationContext(), "onSkipToNext called", Toast.LENGTH_SHORT).show();
skipToNextPlaylistItem(); // Handle this button press.
super.onSkipToNext();
}
@Override
public void onSkipToPrevious() {
Log.d(TAG, "onSkipToPrevious called (media button pressed)");
Toast.makeText(getApplicationContext(), "onSkipToPrevious called", Toast.LENGTH_SHORT).show();
skipToPreviousPlaylistItem(); // Handle this button press.
super.onSkipToPrevious();
}
@Override
public void onPause() {
Log.d(TAG, "onPause called (media button pressed)");
Toast.makeText(getApplicationContext(), "onPause called", Toast.LENGTH_SHORT).show();
mpPause(); // Pause the player.
super.onPause();
}
@Override
public void onPlay() {
Log.d(TAG, "onPlay called (media button pressed)");
mpStart(); // Start player/playback.
super.onPlay();
}
@Override
public void onStop() {
Log.d(TAG, "onStop called (media button pressed)");
mpReset(); // Stop and/or reset the player.
super.onStop();
}
});
s_mediaSession.setFlags(MediaSession.FLAG_HANDLES_MEDIA_BUTTONS | MediaSession.FLAG_HANDLES_TRANSPORT_CONTROLS);
s_mediaSession.setActive(true);
}
Poniższa metoda wysyła meta dane (przechowywane w HashMap
) do urządzenia za pomocą A2DP:
void sendMetaData(@NonNull final HashMap<String, String> hm) {
// Return if Bluetooth A2DP is not in use.
if (!((AudioManager) getSystemService(Context.AUDIO_SERVICE)).isBluetoothA2dpOn()) return;
MediaMetadata metadata = new MediaMetadata.Builder()
.putString(MediaMetadata.METADATA_KEY_TITLE, hm.get("Title"))
.putString(MediaMetadata.METADATA_KEY_ALBUM, hm.get("Album"))
.putString(MediaMetadata.METADATA_KEY_ARTIST, hm.get("Artist"))
.putString(MediaMetadata.METADATA_KEY_AUTHOR, hm.get("Author"))
.putString(MediaMetadata.METADATA_KEY_COMPOSER, hm.get("Composer"))
.putString(MediaMetadata.METADATA_KEY_WRITER, hm.get("Writer"))
.putString(MediaMetadata.METADATA_KEY_DATE, hm.get("Date"))
.putString(MediaMetadata.METADATA_KEY_GENRE, hm.get("Genre"))
.putLong(MediaMetadata.METADATA_KEY_YEAR, tryParse(hm.get("Year")))
.putLong(MediaMetadata.METADATA_KEY_DURATION, tryParse(hm.get("Raw Duration")))
.putLong(MediaMetadata.METADATA_KEY_TRACK_NUMBER, tryParse(hm.get("Track Number")))
.build();
s_mediaSession.setMetadata(metadata);
}
Poniższa metoda ustawia PlaybackState
. Ustawia także, na które akcje przycisku MediaSession
zareaguje:
private void setPlaybackState(@NonNull final int stateValue) {
PlaybackState state = new PlaybackState.Builder()
.setActions(PlaybackState.ACTION_PLAY | PlaybackState.ACTION_SKIP_TO_NEXT
| PlaybackState.ACTION_PAUSE | PlaybackState.ACTION_SKIP_TO_PREVIOUS
| PlaybackState.ACTION_STOP | PlaybackState.ACTION_PLAY_PAUSE)
.setState(stateValue, PlaybackState.PLAYBACK_POSITION_UNKNOWN, 0)
.build();
s_mediaSession.setPlaybackState(state);
}
Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow