我正在开发一个应用程序,只要按下硬件音量按钮就会监听音量事件。应用程序可以在前台或后台。我已经关注[this](Is there a broadcast action for volume changes?),但它无法正常工作。以下是我面临的问题
1)如果我按下音量按钮一次 - 事件被触发4-6次 2)如果当前音量最大并且我增加了音量,则事件不会触发..
请帮帮我。
答案 0 :(得分:4)
尝试使用以下代码 -
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_VOLUME_DOWN)){
//Do something
}
return true;
}
for background - any way to detect volume key presses or volume changes with android service?
答案 1 :(得分:0)
在root设备上,您可以使用Xposed框架将自己挂钩到PhoneWindowManager中。一个很好的例子是Xposed Torch模块。只需反编译它,看看它们是如何做的。
答案 2 :(得分:-1)
您可以通过轮询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);
}
};