需求分析
项目中需要通过用户操作手环(发送相应命令到手机)来控制音乐的播放等操作,基本上都是针对系统音乐所做的模拟点击音乐控制Button(media button)来实现,跟音乐在后台时用户操作通知栏控制音乐原理一样。
代码
private void controlMusic(int keyCode) {
long eventTime = SystemClock.uptimeMillis();
KeyEvent key = new KeyEvent(eventTime, eventTime, KeyEvent.ACTION_DOWN, keyCode, 0);
dispatchMediaKeyToAudioService(key);
dispatchMediaKeyToAudioService(KeyEvent.changeAction(key, KeyEvent.ACTION_UP));
}
private void dispatchMediaKeyToAudioService(KeyEvent event) {
AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
if (audioManager != null) {
try {
audioManager.dispatchMediaKeyEvent(event);
} catch (Exception e) {
e.printStackTrace();
}
}
}
- 说明
- 一次完整的点击至少包括:ACTION_DOWN与ACTION_UP
- keyCode的可以查看KeyEvent的源码
/** Key code constant: Play/Pause media key. */
public static final int KEYCODE_MEDIA_PLAY_PAUSE= 85;
/** Key code constant: Stop media key. */
public static final int KEYCODE_MEDIA_STOP = 86;
/** Key code constant: Play Next media key. */
public static final int KEYCODE_MEDIA_NEXT = 87;
/** Key code constant: Play Previous media key. */
public static final int KEYCODE_MEDIA_PREVIOUS = 88;
/** Key code constant: Rewind media key. */
public static final int KEYCODE_MEDIA_REWIND = 89;
/** Key code constant: Fast Forward media key. */
public static final int KEYCODE_MEDIA_FAST_FORWARD = 90;