耳机按键事件中音量加减这两个按键事件的怎么获取?

网上找的demo是在manifest里设置接收下面两个Action,并把优先级设为最高

<action android:name="android.intent.action.MEDIA_BUTTON"/>
<action android:name="android.media.AUDIO_BECOMING_NOISY" /> 

然后重写BroadcastReceiver的onReceive函数,获取Intent.Action_Media_Button的事件:

 public void onReceive(Context context, Intent intent) {
        if(Intent.ACTION_MEDIA_BUTTON.equals(intentAction)){
            KeyEvent keyEvent = (KeyEvent)intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT); //获得KeyEvent对象
            int keyCode = keyEvent.getKeyCode();
                        Log.i(TAG,keyCode+"");
                        }
     }

但经过测试只能得到keycode-headsethook这个按键,也就是播放键的按键事件。按播放键可以输出对应的keycode。音量加与音量减的事件都接收不到,触发的还是系统的调整音量。

有没有大神做过这方面的app呢,麻烦给个demo参考一下,或者告知一下这方面的api要怎么找。
官方文档里我去找了一下,Intent.ACTION_MEDIA_BUTTON的说明是Broadcast Action: The "Media Button" was pressed。不清楚是只针对播放键的还是三个按键都包括。
唔,忘了C币一般是悬赏多少了,先放10个吧,能解决的话会追加的,谢谢各位大神。

和你找的demo差不多,在接收者里监听按键
@Override
public boolean onKeyDown (int keyCode, KeyEvent event) {
// 获取手机当前音量值
int i = getCurrentRingValue ();
switch (keyCode) {
// 音量减小
case KeyEvent.KEYCODE_VOLUME_DOWN:
Toast.makeText (Activity03.this, "当前音量值: " + i, Toast.LENGTH_SHORT).show ();
return true;
// 音量增大
case KeyEvent.KEYCODE_VOLUME_UP:
Toast.makeText (Activity03.this, "当前音量值: " + i, Toast.LENGTH_SHORT).show ();
return true;
}
return super.onKeyDown (keyCode, event);
}

不知道你要的是不是这个?

安卓4.2:在onCreate开始、时调用onAttachedToWindow(),结束时获得Window对象并设置属性Window window = getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_HOMEKEY_DISPATCHED);

 public void onAttachedToWindow()
  {
    getWindow().setType(2009);
    super.onAttachedToWindow();
  }

重写

 public boolean onKeyDown(int keycode, KeyEvent keyevent)
  {
    switch (keycode) {
        case KeyEvent.KEYCODE_VOLUME_DOWN:
            //事件
    break;
    case KeyEvent.KEYCODE_VOLUME_UP:
        //事件
    break;
    }
    }

安卓4.4:在onCreate里面设置:

 getWindow().addFlags(-2147483648);
    getWindow().addPrivateFlags(-2147483648);

添加一些方法:

 void fail(Object paramObject)
  {
    setResult(0);
    finish();
  }

  public void finish()
  {
    super.finish();
  }

    void pass()
  {
    setResult(-1);
    finish();
  }

再重写onKeyDown方法
注意在Activity的结束时要做处理:如下

 this.getWindow().clearFlags(-2147483648);
this.pass();

安卓5.0以上还没做过

AudioManager#registerMediaButtonEventReceiver 这个方法现在过时了 之前可以用这个监听 耳机按键