21

Androidまたは他のプレーヤーのデフォルトの音楽プレーヤーを制御する方法は? 制御とは、一時停止、再生、次へなどを意味します。サービスをバインドする必要がありますか? を使用しようとしましたIMediaPlaybackServiceが、機能していません。Androidマーケットで音楽プレーヤーを制御するアプリを見たので、確かに抜け道があります。何か案が?

4

7 に答える 7

11

ブロードキャスト レシーバーへの送信Intentに関する問題は、ユーザーが少なくとも 1 回はミュージック プレーヤーを開く必要があることです。また、多くのサード パーティのミュージック プレーヤーでは機能しません。

以下のコードは、すべての音楽プレーヤーで機能します。

long eventtime = SystemClock.uptimeMillis();

Intent downIntent = new Intent(Intent.ACTION_MEDIA_BUTTON, null);
KeyEvent downEvent = new KeyEvent(eventtime, eventtime, KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE, 0);
downIntent.putExtra(Intent.EXTRA_KEY_EVENT, downEvent);
sendOrderedBroadcast(downIntent, null);

Intent upIntent = new Intent(Intent.ACTION_MEDIA_BUTTON, null);
KeyEvent upEvent = new KeyEvent(eventtime, eventtime, KeyEvent.ACTION_UP, KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE, 0);
upIntent.putExtra(Intent.EXTRA_KEY_EVENT, upEvent);
sendOrderedBroadcast(upIntent, null);

/*NEXT*/
Intent downIntent = new Intent(Intent.ACTION_MEDIA_BUTTON, null);
KeyEvent downEvent = new KeyEvent(eventtime, eventtime, KeyEvent.ACTION_DOWN,   KeyEvent.KEYCODE_MEDIA_NEXT, 0);
downIntent.putExtra(Intent.EXTRA_KEY_EVENT, downEvent);
sendOrderedBroadcast(downIntent, null);

/*PREVIOUS*/
Intent downIntent = new Intent(Intent.ACTION_MEDIA_BUTTON, null);
KeyEvent downEvent = new KeyEvent(eventtime, eventtime, KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_MEDIA_PREVIOUS, 0);
downIntent.putExtra(Intent.EXTRA_KEY_EVENT, downEvent);
sendOrderedBroadcast(downIntent, null);

このコードは、Sony、Htc、Samsung デバイスでテストしました。

このコードは、ハンズフリー (イヤホン) の再生/一時停止ボタン アクションを模倣します。

于 2013-09-20T05:59:06.110 に答える
6

音楽プレーヤー (現在再生中のプレーヤー) を制御したい場合は、それに KeyEvents を送信する方法があります。

if (mAudioManager == null) mAudioManager = (AudioManager)getSystemService(AUDIO_SERVICE);

KeyEvent event = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_MEDIA_PLAY);
mAudioManager.dispatchMediaKeyEvent(event);

これはより安全な方法です。通常、keyEvent をブロードキャストすると、一度に複数のプレイヤーがプレイされる可能性があります。

注: minSdk 19 以上が必要です。

于 2016-11-08T17:45:33.623 に答える