在android中按下硬件音量按钮时检测事件

时间:2016-01-04 13:12:17

标签: android

我正在开发一个应用程序,只要按下硬件音量按钮就会监听音量事件。应用程序可以在前台或后台。我已经关注[this](Is there a broadcast action for volume changes?),但它无法正常工作。以下是我面临的问题

1)如果我按下音量按钮一次 - 事件被触发4-6次 2)如果当前音量最大并且我增加了音量,则事件不会触发..

请帮帮我。

3 个答案:

答案 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);
    }
};