Android
MediaSession
수색…
통사론
- void mediaSessionCompat.setFlags (int flags)
- void mediaSessionCompat.setMediaButtonReceiver (보류 중 mbr)
- void mediaSessionCompat.setCallback (MediaSessionCompat.Callback 콜백)
- void mediaSessionCompat.setActive (boolean active)
- MediaSessionCompat.Token mediaSessionCompat.getSessionToken ()
- void mediaSessionCompat.release ()
- void mediaSessionCompat.setPlaybackState (PlaybackStateCompat 상태)
- void mediaSessionCompat.setMetadata (MediaMetadataCompat metadata)
비고
모범 사례를 위해 media-compat 라이브러리를 사용하십시오. 라이브러리는 미디어 세션 메소드를 구형 플랫폼 버전의 동등한 메소드로 변환하여 역 호환성을 처리합니다.
단추 이벤트 수신 및 처리
이 예제는 Service
가 시작될 때 MediaSession
객체를 생성합니다. MediaSession
객체는 Service
가 파괴 될 때 해제됩니다.
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();
}
}
다음 메서드는 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);
}
다음 메소드는 ( HashMap
저장된) 메타 데이터를 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);
}
다음 메소드는 PlaybackState
설정합니다. 또한 MediaSession
이 응답 할 버튼 동작을 설정합니다.
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
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow