【发布时间】:2016-05-23 09:53:02
【问题描述】:
我正在开发一个应用程序,只要按下硬件音量按钮,它就会监听音量事件。应用程序可以在前台或后台。我已关注 [this] (Is there a broadcast action for volume changes?),但它无法正常工作。以下是我面临的问题
1) 如果我按一次音量按钮 - 事件会触发 4-6 次。
2)如果当前音量最大并且我增加音量,那么事件不会触发..
请帮帮我。
【问题讨论】:
标签: android
我正在开发一个应用程序,只要按下硬件音量按钮,它就会监听音量事件。应用程序可以在前台或后台。我已关注 [this] (Is there a broadcast action for volume changes?),但它无法正常工作。以下是我面临的问题
1) 如果我按一次音量按钮 - 事件会触发 4-6 次。
2)如果当前音量最大并且我增加音量,那么事件不会触发..
请帮帮我。
【问题讨论】:
标签: android
尝试使用以下代码 -
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_VOLUME_DOWN)){
//Do something
}
return true;
}
用于背景 - any way to detect volume key presses or volume changes with android service?
在有根设备上,您可以使用 Xposed 框架将自己连接到 PhoneWindowManager。 Xposed Torch 模块就是一个很好的例子。只需反编译它,看看他们是如何做的。
【讨论】:
您可以通过轮询 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);
}
};
【讨论】: