[Android] RemoteControlClient 활용하기.
Android 4.0 ICS 이상 부터 음악을 듣다보면 기본 런처의 lock 화면에서 이와 같이 음악을 컨트롤 할 수 있는 기능을 확인할 수 있을 것입니다. 이 기능을 활용하기 위해서는
RemoteControlClient(http://developer.android.com/reference/android/media/RemoteControlClient.html) 를 이용하여 사용할 수 있습니다. Added in API level 14 라는건 확인하셔야 하구요.
Developer 페이지 설명을 보아도 사용 할 수 있도록 잘 설명이 되어 있습니다. 주의사항도 적혀 있구요.
A remote control client object is associated with a media button event receiver. This event receiver must have been previously registered withregisterMediaButtonEventReceiver(ComponentName)
before the RemoteControlClient can be registered throughregisterRemoteControlClient(RemoteControlClient)
.
이와 같은 내용도 있지만. 이외 별도로 AudioFocus를 가지고 있어야 합니다.
AudioManager의 requestAudioFocus()메소드를 통해서 현재 플레이어에 AudioFocus가 있어야지 기본 런처의 lock화면에 이와 같은 음악 컨트롤 할 수 있는 화면이 나오게 됩니다.
등록하는 부분.
private void registerRemoteClient() { if (Build.VERSION.SDK_INT >= 14) { try { if (mAudioManager == null) { mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); } Intent mediaButtonIntent = new Intent(Intent.ACTION_MEDIA_BUTTON); mRemoteComponent = new ComponentName(this, AudioPlayerRemoteEventReceiver.class.getName()); mAudioManager.registerMediaButtonEventReceiver(mRemoteComponent); mediaButtonIntent.setComponent(mRemoteComponent); mediaButtonIntent.setComponent(mRemoteControlResponder); PendingIntent mediaPendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, mediaButtonIntent, 0); myRemoteControlClient = new RemoteControlClient(mediaPendingIntent); mAudioManager.registerRemoteControlClient(myRemoteControlClient); myRemoteControlClient.setTransportControlFlags(RemoteControlClient.FLAG_KEY_MEDIA_PLAY_PAUSE | RemoteControlClient.FLAG_KEY_MEDIA_STOP | RemoteControlClient.FLAG_KEY_MEDIA_NEXT | RemoteControlClient.FLAG_KEY_MEDIA_PREVIOUS | RemoteControlClient.FLAG_KEY_MEDIA_PLAY | RemoteControlClient.FLAG_KEY_MEDIA_PAUSE); } catch (Exception e) { if(CNCronosLog.isDebugLevel()) { e.printStackTrace(); } } } }
unregister
private void unregisterRemoteClient() { try { if (Build.VERSION.SDK_INT >= 14) { if(mRemoteComponent != null) { mAudioManager.unregisterMediaButtonEventReceiver(mRemoteComponent); mRemoteComponent = null;; } if (myRemoteControlClient != null) { mAudioManager.unregisterRemoteControlClient(myRemoteControlClient); } } } catch (Exception e) { if(CNCronosLog.isDebugLevel()) { e.printStackTrace(); } } }
기본 lock 화면에다가 정보 보내는 부분.
MetadataEditor metaEdit = myRemoteControlClient.editMetadata(true); metaEdit.putString(MediaMetadataRetriever.METADATA_KEY_TITLE, "title"); metaEdit.putString(MediaMetadataRetriever.METADATA_KEY_ARTIST, "artist"); metaEdit.putString(MediaMetadataRetriever.METADATA_KEY_ALBUM, "album"); metaEdit.putBitmap(MetadataEditor.BITMAP_KEY_ARTWORK, bitmap); metaEdit.apply();
현재 player 상태 보내는 부분.
myRemoteControlClient.setPlaybackState(RemoteControlClient.PLAYSTATE_PLAYING); myRemoteControlClient.setPlaybackState(RemoteControlClient.PLAYSTATE_STOPPED); myRemoteControlClient.setPlaybackState(RemoteControlClient.PLAYSTATE_PAUSED); myRemoteControlClient.setPlaybackState(RemoteControlClient.PLAYSTATE_STOPPED); myRemoteControlClient.setPlaybackState(RemoteControlClient.PLAYSTATE_STOPPED);
'Android' 카테고리의 다른 글
[Android]AlarmManager를 이용하여 특정 요일, 시간 마다 알람 울리기. (8) | 2014.06.02 |
---|---|
[Android] Update single item in ListView (0) | 2014.05.23 |
[Android]ANDROID PERFORMANCE OPTIMIZATION (0) | 2014.02.25 |
[Android] proguard 적용 시 addJavascriptInterface 가 제대로 동작하지 않을 때 처리. (0) | 2013.08.29 |
[Android] ActionBarCompat (0) | 2013.08.14 |