标题使这听起来比实际简单得多。我正在尝试广播一个可以暂停大多数音乐播放器的意图。
我知道我可以使用创建一个 KeyEvent 来广播 KEYCODE_MEDIA_PLAY_PAUSE :
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);
ctx.sendOrderedBroadcast(downIntent, null);
那行得通。它将按照我的意愿暂停股票媒体播放器,以及支持耳机播放/暂停按钮的大多数其他音乐播放器。但由于某种原因,它只能与股票音乐播放器一起使用一次。我可以按下按钮来调用它,它会暂停音乐。如果我再次开始播放,然后再次按下暂停按钮,它就不起作用了。一旦我重新启动设备,它就会再次工作。但是,对于 Pandora,它可以始终如一地工作。
我想我也许可以解决这个问题,然后在不使用 KeyEvent 的情况下暂停。我用 AudioManager 和另一个意图尝试了这个:
AudioManager mAudioManager = (AudioManager) ctx.getSystemService(Context.AUDIO_SERVICE);
if (mAudioManager.isMusicActive()) {
Intent mediaIntent = new Intent("com.android.music.musicservicecommand");
mediaIntent.putExtra("command", "pause");
ctx.sendBroadcast(mediaIntent);
}
这也有效,并且一直有效。但它本质上是脆弱的,因为通过将意图直接发送到 Android 音乐播放器,它是唯一可以使用的播放器。无法控制 Pandora、Last.FM 等,我需要它与大多数音乐播放器一起工作。
我只是不确定下一步该去哪里。只要可行,我对给出什么样的解决方案并不挑剔。如果你能帮助我使 KeyEvent 工作,太棒了,如果你有一些完全不同的解决方案,太棒了。我只是想让它工作!谢谢!