android+耳机插拔和耳机按键检测

1.耳机插拔

首先,在oncreate里面注册receiver,

[html]view plaincopy
  1. registerReceiver(headSetReceiver,newIntentFilter(Intent.ACTION_HEADSET_PLUG));


接着,是接收广播部分:

[java]view plaincopy
  1. privatefinalBroadcastReceiverheadSetReceiver=newBroadcastReceiver(){
  2. @Override
  3. publicvoidonReceive(Contextcontext,Intentintent){
  4. Log.d(TAG,"intoheadsetreceiver!");
  5. Stringaction=intent.getAction();
  6. if(action.equals(Intent.ACTION_HEADSET_PLUG)){
  7. //headphoneplugged
  8. if(intent.getIntExtra("state",0)==1){
  9. //dosomething
  10. Log.d(TAG,"thisisheadphoneplugged");
  11. headsetState.setText("耳机检测:插入");
  12. //headphoneunplugged
  13. }else{
  14. //dosomething
  15. Log.d(TAG,"thisisheadphoneunplugged");
  16. headsetState.setText("耳机检测:没有插入");
  17. }
  18. }
  19. }
  20. ;


2.耳机按键检测

[java]view plaincopy
  1. /*检测耳机按键*/
  2. publicbooleanonKeyDown(intkeyCode,KeyEventevent){
  3. switch(keyCode){
  4. caseKeyEvent.KEYCODE_HEADSETHOOK:
  5. //DisplayToast("按下:耳机键");
  6. headsetState.setText("耳机检测:插入,耳机按键按下");
  7. break;
  8. }
  9. returntrue;
  10. }
  11. publicbooleanonKeyUp(intkeyCode,KeyEventevent){
  12. switch(keyCode){
  13. caseKeyEvent.KEYCODE_HEADSETHOOK:
  14. //DisplayToast("弹起:耳机键");
  15. headsetState.setText("耳机检测:插入,耳机按键弹起");
  16. break;
  17. }
  18. returntrue;
  19. }


就可以检测到耳机按键了,网路上有人说可以通过下面的方法检测耳机按键,并且是转载了N多篇的。我试了 不行。。。 希望有成功的哥们,看到后给我留言讲讲,交流很重要。。。

[html]view plaincopy
  1. 只需要在filter里面加入Intent.ACTION_MEDIA_BUTTON
  2. 然后在onReceive函数里面处理
  3. finalKeyEventevent=(KeyEvent)intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);
  4. if(event!=null&&event.getAction()==KeyEvent.ACTION_DOWN){
  5. //dosomething
  6. }

上面提到的问题 ,现在明白了 是广播接收有一个优先级的概念在里面,而 hook 被系统的自带的播发器给截获了,用完以后又给销毁了 所以导致我的应用监听不到hook按键 ,只要提升广播接收的优先级即可 系统的是1000 我的是1000+1; ok!

你可能感兴趣的:(android+耳机插拔和耳机按键检测)