Android 通过代码模拟媒体按键控制音乐播放器
项目背景
在蓝牙手表等设备不配对的情况下,需要监听按键给出相应的控制回应。由于部分手机设置限制,网上方法往往无效,这里提供一种较为统一的方法。
实现原理
主要通过 AudioManager 检测当前是否有音乐播放,并通过发送广播(Broadcast)模拟媒体按键事件(Media Button),从而控制第三方音乐播放器的状态。
核心代码
初始化与状态检测
private long eventtime = 0;
private AudioManager vAudioManager = null;
// 此处在 onCreate 方法中初始化
eventtime = SystemClock.uptimeMillis();
vAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
// 判断播放或暂停
if (vAudioManager.isMusicActive()) {
Toast.makeText(getApplicationContext(), "有音乐在播放---暂停", Toast.LENGTH_SHORT).show();
pauseMusic(); // 暂停
} else {
Toast.makeText(getApplicationContext(), "无音乐在播放--开始", Toast.LENGTH_SHORT).show();
playMusic(); // 播放
}
播放/暂停控制
/**
* 暂停
*/
private void pauseMusic() {
if (eventtime <= 0) return;
Intent downIntent = new Intent(Intent.ACTION_MEDIA_BUTTON, null);
KeyEvent downEvent = new (eventtime, eventtime, KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_MEDIA_PAUSE, );
downIntent.putExtra(Intent.EXTRA_KEY_EVENT, downEvent);
sendOrderedBroadcast(downIntent, );
(Intent.ACTION_MEDIA_BUTTON, );
(eventtime, eventtime, KeyEvent.ACTION_UP, KeyEvent.KEYCODE_MEDIA_PAUSE, );
upIntent.putExtra(Intent.EXTRA_KEY_EVENT, upEvent);
sendOrderedBroadcast(upIntent, );
}
{
(eventtime <= ) ;
(Intent.ACTION_MEDIA_BUTTON, );
(eventtime, eventtime, KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_MEDIA_PLAY, );
downIntent.putExtra(Intent.EXTRA_KEY_EVENT, downEvent);
sendOrderedBroadcast(downIntent, );
(Intent.ACTION_MEDIA_BUTTON, );
(eventtime, eventtime, KeyEvent.ACTION_UP, KeyEvent.KEYCODE_MEDIA_PLAY, );
upIntent.putExtra(Intent.EXTRA_KEY_EVENT, upEvent);
sendOrderedBroadcast(upIntent, );
}


