ACTION_MEDIA_BUTTONインテントを使用してsendOrderedBroadcastを送信すると(ユーザーがBluetoothヘッドセットの再生ボタンをクリックしていることを模倣しています)、Google Playミュージックが開き、フォアグラウンドの音楽再生アプリではなく、最後に再生されたアルバムが再生されます。
sendBroadcastに変更すると、Google Playミュージックと現在の音楽再生アプリ(私の場合はPandora)の両方で再生ボタンが表示されます。
これはAndroid4.0以降でのみ発生します。Play Musicはこの意図を覆い隠していますか(バグ)?次のアドバイスに従って、Pandoraが現在のメディアボタンハンドラーとして登録されていないのではないかと思いますか:http: //android-developers.blogspot.com/2010/06/allowing-applications-to-play-nicer.html
このインテントを現在の音楽再生アプリのみに向ける方法はありますか?
これが私のコードです:
public void broadcastMediaIntent(MediaIntent intentType){
long eventtime = SystemClock.uptimeMillis();
Intent downIntent = new Intent(Intent.ACTION_MEDIA_BUTTON, null);
Intent upIntent = new Intent(Intent.ACTION_MEDIA_BUTTON, null);
KeyEvent downEvent = null;
KeyEvent upEvent = null;
switch(intentType){
case NEXT:
downEvent = new KeyEvent(eventtime, eventtime,
KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_MEDIA_NEXT, 0);
upEvent = new KeyEvent(eventtime, eventtime,
KeyEvent.ACTION_UP, KeyEvent.KEYCODE_MEDIA_NEXT, 0);
break;
case PLAY_PAUSE:
downEvent = new KeyEvent(eventtime, eventtime,
KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE, 0);
upEvent = new KeyEvent(eventtime, eventtime,
KeyEvent.ACTION_UP, KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE, 0);
break;
case PREVIOUS:
downEvent = new KeyEvent(eventtime, eventtime,
KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_MEDIA_PREVIOUS, 0);
upEvent = new KeyEvent(eventtime, eventtime,
KeyEvent.ACTION_UP, KeyEvent.KEYCODE_MEDIA_PREVIOUS, 0);
break;
case FAST_FORWARD:
downEvent = new KeyEvent(eventtime, eventtime,
KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_MEDIA_FAST_FORWARD, 0);
upEvent = new KeyEvent(eventtime, eventtime,
KeyEvent.ACTION_UP, KeyEvent.KEYCODE_MEDIA_FAST_FORWARD, 0);
break;
case REWIND:
downEvent = new KeyEvent(eventtime, eventtime,
KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_MEDIA_REWIND, 0);
upEvent = new KeyEvent(eventtime, eventtime,
KeyEvent.ACTION_UP, KeyEvent.KEYCODE_MEDIA_REWIND, 0);
break;
default:
break;
}
downIntent.putExtra(Intent.EXTRA_KEY_EVENT, downEvent);
sendOrderedBroadcast(downIntent, null);
upIntent.putExtra(Intent.EXTRA_KEY_EVENT, upEvent);
sendOrderedBroadcast(upIntent, null);
}