You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何向当前媒体播放器发送Media Action Button指令实现简易遥控?

如何向Walkman、Google Play Music发送媒体控制指令

当然可以!在Android平台上实现播放、暂停、切歌这类媒体控制完全可行,做简易遥控器的话,有两种实用方案,我给你详细讲清楚:

方案一:发送系统广播(兼容性超强,适配老牌播放器)

Walkman、Google Play Music这类经典播放器都能响应Android系统的媒体按键广播。你只需要构建对应的Intent并发送,就能模拟实体媒体按键的操作:

  • 播放/暂停
    Intent playPauseIntent = new Intent(Intent.ACTION_MEDIA_BUTTON);
    playPauseIntent.putExtra(Intent.EXTRA_KEY_EVENT, new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE));
    sendBroadcast(playPauseIntent);
    // 必须补上ACTION_UP事件,模拟真实按键的完整触发流程
    playPauseIntent.putExtra(Intent.EXTRA_KEY_EVENT, new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE));
    sendBroadcast(playPauseIntent);
    
  • 切换上一曲
    Intent prevIntent = new Intent(Intent.ACTION_MEDIA_BUTTON);
    prevIntent.putExtra(Intent.EXTRA_KEY_EVENT, new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_MEDIA_PREVIOUS));
    sendBroadcast(prevIntent);
    prevIntent.putExtra(Intent.EXTRA_KEY_EVENT, new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_MEDIA_PREVIOUS));
    sendBroadcast(prevIntent);
    
  • 切换下一曲
    Intent nextIntent = new Intent(Intent.ACTION_MEDIA_BUTTON);
    nextIntent.putExtra(Intent.EXTRA_KEY_EVENT, new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_MEDIA_NEXT));
    sendBroadcast(nextIntent);
    nextIntent.putExtra(Intent.EXTRA_KEY_EVENT, new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_MEDIA_NEXT));
    sendBroadcast(nextIntent);
    

划重点:从Android 7.0(API 24)开始,发送这个广播需要在Manifest里声明android.permission.BROADCAST_MEDIA_CONTROL权限。如果想只控制特定播放器,还可以给Intent指定包名,避免干扰其他正在运行的媒体应用。

方案二:使用MediaController(官方推荐的现代方案)

如果你的目标设备是Android 5.0(API 21)及以上,更推荐用MediaController+MediaSession的组合——这是官方主推的媒体控制交互方式,能精准控制指定播放器,不会“误触”其他应用:

  1. 先获取目标播放器的MediaSession Token:你可以通过MediaController.getActiveControllers()获取当前活跃的所有媒体会话,或者监听MediaSessionManager的回调来定位到Walkman/Google Play Music的会话。
  2. 创建MediaController实例后,直接调用控制方法就行:
    // 假设已经拿到了目标播放器的mediaSessionToken
    MediaController mediaController = new MediaController(context, mediaSessionToken);
    // 播放/暂停切换
    mediaController.getTransportControls().playPause();
    // 切上一曲
    mediaController.getTransportControls().skipToPrevious();
    // 切下一曲
    mediaController.getTransportControls().skipToNext();
    

这种方式的优势是直接和目标应用的媒体会话通信,控制更精准,也符合Android的现代开发规范。

几个实用小提示

  • 做遥控器的话,建议先检测当前正在播放的媒体应用,再针对性发送指令,避免操作错应用。
  • 虽然Google Play Music已经逐步被YouTube Music替代,但旧版本的GPM依然完美支持上面两种控制方式。
  • 权限方面,除了广播权限,使用MediaController可能还需要android.permission.MEDIA_CONTENT_CONTROL权限,记得在Manifest里加上。

内容的提问来源于stack exchange,提问作者mhmdbsh

火山引擎 最新活动