Android模拟播放/暂停按钮

Android模拟播放/暂停按钮,android,android-intent,android-broadcast,keyevent,android-context,Android,Android Intent,Android Broadcast,Keyevent,Android Context,我试图让我的应用程序打开谷歌播放音乐,然后模拟播放/暂停命令。我的应用程序能够成功启动Google Play Music,但不会播放downIntent和upIntent按键事件。我怀疑这是因为调用该方法只是调用我的主类上的方法,而不是播放音乐本身。播放这些关键事件以播放音乐的正确方式是什么 Intent intent = getPackageManager().getLaunchIntentForPackage("com.google.android.music"); startActivit

我试图让我的应用程序打开谷歌播放音乐,然后模拟播放/暂停命令。我的应用程序能够成功启动Google Play Music,但不会播放
downIntent
upIntent
按键事件。我怀疑这是因为调用该方法只是调用我的主类上的方法,而不是播放音乐本身。播放这些关键事件以播放音乐的正确方式是什么

Intent intent = getPackageManager().getLaunchIntentForPackage("com.google.android.music");
startActivity(intent);

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

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

出于安全考虑,你不能这样做。EXTRA_KEY_EVENT的作用与您想象的不同——它不会向系统发送关键事件。

我找到了一位非常有用的朋友,他为我指明了正确的方向

Intent intent = new Intent("com.android.music.musicservicecommand");
intent.putExtra("command", "togglepause");
sendBroadcast(intent);

这似乎在Android 4.x上运行良好,但我还没有在5.x上测试过它。

如果您想控制音乐播放器(当前正在播放的播放器),有一种方法可以向它发送KeyEvents:

if(mAudioManager==null)mAudioManager=(AudioManager)getSystemService(AUDIO_服务)

KeyEvent事件=新的KeyEvent(KeyEvent.ACTION\u向下,keyCode); mAudioManager.dispatchMediaKeyEvent(事件)


注意:它需要minSdk 19或更高。

啊,我的应用程序有什么方法可以实现我想要的功能吗?打开Play Music>Play/PauseUseless,这控制可能不存在的单个应用程序。这是我发现的唯一一个没有INJECT\u EVENTS权限的跨应用程序解决方案。在某些情况下,您可能需要使用KeyEvent.ACTION\u跟进,具体取决于目标应用程序的实现。哇,我刚刚花了几天时间试图找到这个,刚试过,砰!但愿我能投下100票