【问题标题】:Detect event when hardware volume button is pressed in android在android中按下硬件音量按钮时检测事件
【发布时间】:2016-05-23 09:53:02
【问题描述】:

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

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

请帮帮我。

【问题讨论】:

    标签: android


    【解决方案1】:

    尝试使用以下代码 -

    @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?

    【解决方案2】:

    在有根设备上,您可以使用 Xposed 框架将自己连接到 PhoneWindowManager。 Xposed Torch 模块就是一个很好的例子。只需反编译它,看看他们是如何做的。

    【讨论】:

      【解决方案3】:

      您可以通过轮询 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);
          }
      };
      

      【讨论】:

      • 在您的应用程序中只需调用 handler.post(volumeUpdater),每 100 毫秒循环将检查音量是否改变,因此如果它与保存的不同,您知道用户按下了音量按钮。您可能需要将 AudioManager.STREAM_MUSIC 更改为 STREAM_NOTIFICATION
      • 如果您找到更好的解决方案,我将很高兴听到。我很乐意从继承的代码中摆脱它。
      • 第一个问题已解决,我正在处理第二个问题。我会在第二个解决后立即发布我的答案
      猜你喜欢
      • 1970-01-01
      • 2013-11-08
      • 2017-02-10
      • 1970-01-01
      • 2015-04-12
      • 2011-04-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多