在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);获取按下的按键实现⾃⼰对应功能
return true;
}
});
吴文献事件if(!mMediaSession.isActive()){
mMediaSession.setActive(true);
}
}
//别忘了在onDestroy()中释放mediaSession
@Override
public void onDestroy(){
山东电力建设第二工程公司
}