Android 4.0でサポートされたRemoteControlClientを利用すると
オリジナルのメディアプレイヤーと連携して端末のロック画面から音楽ファイルの再生/停止、
早送り/巻き戻しなどが行うことができるようになります。
上の図のように、ロック画面上に表示される制御パネルをリモートコントロールと呼びます。
このリモートコントロール上には再生中の音楽ファイルの曲名やアーティスト名などの情報も
表示することができます。
オリジナルのメディアプレイヤーでリモートコントロールを利用するためのステップは以下のようになります。
- ACTION_MEDIA_BUTTONインテントを処理するBroadcastReceiverを登録する
- RemoteControlClientを生成してシステムに登録する
- サポートするメディア制御処理を設定する
- リモートコントロール上に表示するメディア情報を設定する
それでは続きから詳しく説明していきます。
ACTION_MEDIA_BUTTONインテントを処理するBroadcastReceiverを登録する
リモートコントロール上のメディア制御ボタンが押されると
ACTION_MEDIA_BUTTONイベントが送信されます。
このACTION_MEDIA_BUTTONインテントを処理するBroadcastReceiverを
AudioManagerクラスのregisterMediaButtonEventReceiverメソッドを
使ってシステムに登録します。
■MusicService.java
// AudioManagerオブジェクトを取得する AudioManager myAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); // BroadcastReceiverのコンポーネント名を取得する ComponentName myEventReceiver = new ComponentName(getPackageName(), MyRemoteControlEventReceiver.class.getName()); // BroadcastReceiverをシステムに登録する myAudioManager.registerMediaButtonEventReceiver(myEventReceiver);
RemoteControlClientを生成してシステムに登録する
次にリモートコントロール上のメディア制御ボタンが押されたときに
送信されるPendingIntentを作成します。
このPendingIntentをRemoteControlClientのインスタンスを生成するときに
コンストラクタで渡して、registerRemoteControlClientメソッドで
RemoteControlClientをシステムに登録します。
■MusicService.java
// RemoteControlClientの為にPendingIntentを作成する Intent mediaButtonIntent = new Intent(Intent.ACTION_MEDIA_BUTTON); mediaButtonIntent.setComponent(myEventReceiver); PendingIntent mediaPendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, mediaButtonIntent, 0); // RemoteControlClientを生成し、PendingIntentを設定する RemoteControlClient myRemoteControlClient = new RemoteControlClient(mediaPendingIntent); // RemoteControlClientをシステムに登録する myAudioManager.registerRemoteControlClient(myRemoteControlClient);
サポートするメディア制御処理を設定する
リモートコントロール上で実行されるメディア制御処理に対して
オリジナルのメディアプレイヤーが対応できるものを設定しておきます。
この設定はsetTransportControlFlagsメソッドで行います。
public void setTransportControlFlags (int transportControlFlags)
具体的には以下のように設定します。
■MusicService.java
myRemoteControlClient.setTransportControlFlags( RemoteControlClient.FLAG_KEY_MEDIA_PLAY | RemoteControlClient.FLAG_KEY_MEDIA_PAUSE | RemoteControlClient.FLAG_KEY_MEDIA_NEXT | RemoteControlClient.FLAG_KEY_MEDIA_STOP);
リモートコントロール上に表示するメディア情報を設定する
リモートコントロール上に再生中の音楽ファイルのメディア情報を設定するには
editMetadataメソッドを使います。
■MusicService.java
myRemoteControlClient.editMetadata(true) .putString(MediaMetadataRetriever.METADATA_KEY_ARTIST, playingItem.getArtist()) .putString(MediaMetadataRetriever.METADATA_KEY_ALBUM, playingItem.getAlbum()) .putString(MediaMetadataRetriever.METADATA_KEY_TITLE, playingItem.getTitle()) .apply();
MediaMetadataRetrieverクラスで定義されているメタ情報を表示設定することができます。
利用可能なメタ情報についてはドキュメントをご確認下さい。
メディアプレイヤーの実装も含めたサンプルがAndroid Developersにて
公開されています。具体的な実装例はこちらをご参照下さい。
http://developer.android.com/resources/samples/RandomMusicPlayer/index.html