Android后台监听耳机(线控、蓝牙)按键事件

Android后台监听⽿机(线控、蓝⽛)按键事件
在Activity中重写onKeyDown、onKeyUp这些⽅法只适⽤于APP在前台的情况,如果将APP切换到后台就失效了。
经过⽹上⼀番摸索、读源码,终于把这个功能整出来了,说⼀下我的实现过程。
1.后台要获取到事件第⼀事件想到的肯定是⼴播,于是就到了“android.intent.action.MEDIA_BUTTON”这个⼴播
2.注册监听这个⼴播后发现…这个⼴播压根接收不到啊,⽹上了半天,有很多叫添加优先级(priority)的,可根本没⽤。。。
//获得AudioManager对象摆平就是水平
AudioManager mAudioManager =(AudioManager)getSystemService(Context.AUDIO_SERVICE);
//构造⼀个ComponentName,指向MediaoButtonReceiver类
//下⾯为了叙述⽅便,我直接使⽤ComponentName类来替代MediaoButtonReceiver类
ComponentName  mbCN =new ComponentName(getPackageName(),Name());
//注册⼀个MedioButtonReceiver⼴播监听
//取消注册的⽅法
mAudioManager.unregisterMediaButtonEventReceiver(mbCN);
4.但是这个⽅法已经过时了(毕竟是10年前的⽂章),通过源码得知registerMediaButtonEventReceiver这个⽅法被MediaSession.setMediaButtonReceiver替代了
吉尔达
@deprecated Use {@link MediaSession#setMediaButtonReceiver(PendingIntent)} instead.
5.⼜⼀番摸索后,到了MediaSessionCompat这个类,具体的实现⽅法如下(注意要在Service中注册监听哦)
private MediaSessionCompat mMediaSession;
@Override
public void onCreate(){
ComponentName mbr =new ComponentName(getPackageName(), Name());
mMediaSession =new MediaSessionCompat(this,"mbr", mbr,null);木结构设计规范
mMediaSession.setFlags(MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS |
MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS);
mMediaSession.setCallback(new MediaSessionCompat.Callback(){
@Override
public boolean onMediaButtonEvent(Intent intent){
//在这⾥就可以接收到(线控、蓝⽛⽿机的按键事件了)
中华人民共和国收养法
//通过ParcelableExtra(Intent.EXTRA_KEY_EVENT);获取按下的按键实现⾃⼰对应功能
//返回true表⽰不让别的程序继续处理这个⼴播
return true;
}
});
吴文献事件if(!mMediaSession.isActive()){
mMediaSession.setActive(true);
}
}
//别忘了在onDestroy()中释放mediaSession
@Override
public void onDestroy(){
山东电力建设第二工程公司
}

本文发布于:2024-09-21 22:44:21,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/516679.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:事件   按键   监听   不让
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议