网上找的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 这个方法现在过时了 之前可以用这个监听 耳机按键