在android中按下硬件音量按钮时检测事件
我正在开发一个应用程序,每当按下硬件音量按钮时,它都会监听音量事件。应用程序可以在前台或后台。我遵循了[这个](),但它不能正常工作。以下是我面临的问题 1) 如果我按一次音量按钮,事件将被触发4-6次。在android中按下硬件音量按钮时检测事件,android,Android,我正在开发一个应用程序,每当按下硬件音量按钮时,它都会监听音量事件。应用程序可以在前台或后台。我遵循了[这个](),但它不能正常工作。以下是我面临的问题 1) 如果我按一次音量按钮,事件将被触发4-6次。 2) 如果当前音量最大,并且我增加了音量,则事件不会触发 请帮助我。尝试使用以下代码- @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if ((keyCode == KeyEvent.KEYCODE_
2) 如果当前音量最大,并且我增加了音量,则事件不会触发
请帮助我。尝试使用以下代码-
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_VOLUME_DOWN)){
//Do something
}
return true;
}
对于后台-您可以通过轮询AudioManager来检测当前卷,这不是一个很好的解决方案,但我不知道更好
private Handler handler;
public int volume;
private Runnable volumeUpdater = new Runnable() {
private int updatesInterval = 100;
@Override
public void run() {
if(volume != audioManager.getStreamVolume(AudioManager.STREAM_MUSIC)){
//volume changed put logic here
}
handler.postDelayed(volumeUpdater, updatesInterval);
}
};
在根设备上,您可以使用Xposed框架将自己连接到PhoneWindowManager。模块就是一个很好的例子。只要反编译一下,看看他们是怎么做的 尝试在你的应用程序中调用handler.post(volumeUpdater),每100ms循环将检查音量是否更改,因此如果它与保存的音量不同,你就知道用户按下了音量按钮。您可能必须将AudioManager.STREAM\u MUSIC更改为STREAM\u notification如果您找到更好的解决方案,我将很高兴听到。我很乐意从继承的代码中去掉这个问题。第一个问题解决了,我正在处理第二个问题。第二个问题解决后,我会尽快发布我的答案