现在的位置: 首页 > 综合 > 正文

Android 音乐播放器 ,防止耳机按键MediaButton 被 系统或其他第三方播放器截获

2018年05月16日 ⁄ 综合 ⁄ 共 1442字 ⁄ 字号 评论关闭

mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
        ComponentName rec = new ComponentName(getPackageName(),MediaButtonIntentReceiver.class.getName());
        mAudioManager.registerMediaButtonEventReceiver(rec);

先 注册 MediaButton的 Receiver 

然后获取焦点 Listener 里面没有实现 。 只是看了下状态。

mAudioManager.requestAudioFocus(new OnAudioFocusChangeListener() {
@Override
public void onAudioFocusChange(int focusChange) {
//操作待定
switch (focusChange) {
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
// Pause playback
SystemLog.error(CLASS_NAME, "onAudioFocusChange", "AUDIOFOCUS_LOSS_TRANSIENT");
break;
case AudioManager.AUDIOFOCUS_LOSS:
// am.unregisterMediaButtonEventReceiver(RemoteControlReceiver);
// am.abandonAudioFocus(afChangeListener);
// // Stop playback
SystemLog.error(CLASS_NAME, "onAudioFocusChange", "AUDIOFOCUS_LOSS");
break;
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:
// Lower the volume
SystemLog.error(CLASS_NAME, "onAudioFocusChange", "AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK");
break;

case AudioManager.AUDIOFOCUS_GAIN:
// Resume playback or Raise it back to normal
SystemLog.error(CLASS_NAME, "onAudioFocusChange", "AUDIOFOCUS_GAIN");
break;
}
}
} , AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN);//AudioManager.AUDIOFOCUS_GAIN持续获取焦点

使 当前的 receiver 持续获得焦点。 这样可以 防止 
AudioManager 焦点暂时丢失后 系统播放器
或者QQ音乐什么的 获取Audio焦点。焦点被夺后,耳机按键事件会被其他播放器拦截。 因为mAudioManager.registerMediaButtonEventReceiver 注册后
会把receiver放到
内部的stack
mAudioManager收到 MediaButton广播时如果stack不为空只发送给
栈顶 receiver。如果为空
发送广播 ,使所有  监听 MediaButton Action的Receiver 。

抱歉!评论已关闭.