【发布时间】:2013-12-31 11:32:34
【问题描述】:
我使用此代码发送音乐播放器的播放/暂停等操作。
// play / pause
i.putExtra("command", "togglepause");
context.sendBroadcast(i);
但它仅适用于默认音乐播放器(手机自带的音乐播放器)。有什么方法可以在其他音乐播放器播放时控制它们吗?
【问题讨论】:
我使用此代码发送音乐播放器的播放/暂停等操作。
// play / pause
i.putExtra("command", "togglepause");
context.sendBroadcast(i);
但它仅适用于默认音乐播放器(手机自带的音乐播放器)。有什么方法可以在其他音乐播放器播放时控制它们吗?
【问题讨论】:
从 API 级别 19 开始,引入了新的 API dispatchMediaKeyEvent()。
发送媒体按钮的模拟键事件。要模拟按键,您必须先发送一个使用 ACTION_DOWN 动作构建的 KeyEvent,然后再发送一个使用 ACTION_UP 动作的事件。
AudioManager am = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE);
downEvent = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE);
am.dispatchMediaKeyEvent(downEvent);
upEvent = new KeyEvent(KeyEvent.ACTION_UP,KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE);
am.dispatchMediaKeyEvent(upEvent);
此媒体事件将仅发送到当前正在运行的音乐播放器,而不是发送到所有播放器。
谢谢
【讨论】:
你试过了吗-
i.putExtra("command", "pause");
编辑:
替代解决方案,使用 PackageManager、Intent、ResolveInfo 等以编程方式列出所有音乐应用,然后向列表中的所有应用发送命令。
【讨论】:
广播意图无法正常工作以及支持 Spotify。请参阅我的answer 并提供解决方案。
【讨论】: