Android模拟播放/暂停按钮

问题描述 投票:0回答:5

我正在尝试让我的应用程序打开 Google Play 音乐,然后模拟播放/暂停命令。我的应用程序能够成功启动 Google Play 音乐,但

downIntent
upIntent
KeyEvents 从未广播。我怀疑这是因为调用该方法只是调用我的主类上的方法,而不是播放音乐本身。广播这些 KeyEvents 以播放音乐的正确方法是什么?

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);
android android-intent android-broadcast keyevent android-context
5个回答
4
投票

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

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

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

注意:minSdk 需要19以上。


0
投票

如果您能够使用 AccessibilityService,您可以将其 performGlobalAction() 方法与 GLOBAL_ACTION_KEYCODE_HEADSETHOOK 参数一起使用,从 API 级别 31 开始可用。


-1
投票

出于安全原因,您不能。 EXTRA_KEY_EVENT 不会做您认为它会做的事情 - 它不会将按键事件发送到系统。


-1
投票

如果您想定位特定应用程序,这可行,您甚至不必启动该应用程序。

sendBroadcast(new Intent(Intent.ACTION_MEDIA_BUTTON).putExtra(Intent.EXTRA_KEY_EVENT, new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE)).setPackage(packageName), null);
sendBroadcast(new Intent(Intent.ACTION_MEDIA_BUTTON).putExtra(Intent.EXTRA_KEY_EVENT, new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE)).setPackage(packageName), null);

-3
投票

我找到了一位非常乐于助人的朋友,他为我指明了正确的方向。

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

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

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.