RemoteControlClient

안드로이드 4.0 (ICS) API LEVEL 14 부터 RemoteControlClient 를 지원한다.

RemoteControlClient는 음악의 메타정보와 앨범아트 뿐만 아니라 재생컨트롤을 할 수 있는 정보를 락스크린에 노출 해준다.

이런식의 UI로 락스크린에 노출 되게 된다. UI는 변경 할 수없다.

4.2부터 지원되는 락스크린의 위젯으로도 추가 할 수 있다.

구현 방법은 간단하다. AudioManager의 registerRemoteControlClient로 RemoteControlClient를 등록만 해주면 된다.

여기 주의 할점은 registerMediaButtonEventReceiver를 등록 해줘야 하며 AudioFocus를 받도록 해야 UI가 나타난다.

registerRemoteControlClient를 등록 하기전 registerMediaButtonEventReceiver를 해야된다.

ComponentName myEventReceiver = new ComponentName(getPackageName(), MyRemoteControlEventReceiver.class.getName());
AudioManager myAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
        
myAudioManager.registerMediaButtonEventReceiver(myEventReceiver);
        
// build the PendingIntent for the remote control client
Intent mediaButtonIntent = new Intent(Intent.ACTION_MEDIA_BUTTON);
mediaButtonIntent.setComponent(myEventReceiver);
        
PendingIntent mediaPendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, mediaButtonIntent, 0);
        
// create and register the remote control client
RemoteControlClient myRemoteControlClient = new RemoteControlClient(mediaPendingIntent);
myAudioManager.registerRemoteControlClient(myRemoteControlClient);

myRemoteControlClient의 setTransportControlFlags메소드로 사용할 컨트롤을 지정한다. 

그리고 myRemoteControlClient.editMetadata(boolean)으로 메타데이터를 넘겨준다.

                
myRemoteControlClient.setTransportControlFlags(
                RemoteControlClient.FLAG_KEY_MEDIA_PLAY_PAUSE | 
                RemoteControlClient.FLAG_KEY_MEDIA_STOP | 
                RemoteControlClient.FLAG_KEY_MEDIA_NEXT | 
                RemoteControlClient.FLAG_KEY_MEDIA_PREVIOUS);

MetadataEditor metadataEditor = myRemoteControlClient.editMetadata(true); 
        
metadataEditor.putString(MediaMetadataRetriever.METADATA_KEY_ARTIST, mArtistNm);
metadataEditor.putString(MediaMetadataRetriever.METADATA_KEY_ALBUM, mAlbumTitle);
metadataEditor.putString(MediaMetadataRetriever.METADATA_KEY_TITLE, mTrackTitle);
metadataEditor.putLong(MediaMetadataRetriever.METADATA_KEY_DURATION, mDuration);
metadataEditor.putBitmap(MetadataEditor.BITMAP_KEY_ARTWORK, mAlbumArt);
metadataEditor.apply();

미디어 플레이어의 상황에 따라 setPlaybackState메소드로 상태를 변경 해주면 끝이다.

               
myRemoteControlClient.setPlaybackState(RemoteControlClient.PLAYSTATE_BUFFERING);
myRemoteControlClient.setPlaybackState(RemoteControlClient.PLAYSTATE_PLAYING);
myRemoteControlClient.setPlaybackState(RemoteControlClient.PLAYSTATE_STOPPED);
myRemoteControlClient.setPlaybackState(RemoteControlClient.PLAYSTATE_PAUSED);

여기 까지 RemoteControlClient를 알아 보았다. 

주의할 점은 AudioFocus를 받고 있어야 UI가 나타나므로 재생시 AudioFocus를 가져오도록 하는 별도의 작업이 필요 한다.

댓글 남기기