【问题标题】:Android dispatchKeyEvent , onKeyDown callbacks not working with gesture volume control (Huawei mate 30 pro)Android dispatchKeyEvent , onKeyDown 回调不适用于手势音量控制(华为 mate 30 pro)
【发布时间】:2021-10-14 16:09:24
【问题描述】:

我添加了 dispatchKeyEvent 和 onKeyDown 来检测活动中的音量变化事件,这在具有物理音量按钮的设备上运行良好。在华为 mate 30 pro 的情况下,上述事件不会触发,因为它没有物理音量按钮,而是控制音量的手势。 有什么办法吗??

 override fun onKeyDown(keyCode: Int, event: KeyEvent): Boolean {
    d(TAG, "signal onKeyDown $keyCode")
    when (keyCode) {
        KeyEvent.KEYCODE_HOME -> {
            d(TAG, "signal onKeyDown KEYCODE_HOME")
            if (alertDialog != null && alertDialog?.isShowing == true) {
                releaseDataAndFinishActivity()
            }
           
            return false
        }
        KeyEvent.KEYCODE_BACK -> {
            onBackPressed()
            return false
        }
        KeyEvent.KEYCODE_VOLUME_DOWN -> {
            updateVolumeOnKeyPress(false)
            return true
        }
        else -> return true
    }
}

override fun onKeyUp(keyCode: Int, event: KeyEvent?): Boolean {
    if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) {
        updateVolumeOnKeyPress(true)
        return true
    }
    return false
}

override fun dispatchKeyEvent(event: KeyEvent?): Boolean {
    d(TAG, "signal dispatchKeyEvent $event")
    return super.dispatchKeyEvent(event)
}

【问题讨论】:

  • hi@Muhammad Ali,请问您使用的是哪种手势?
  • hi@Muhammad Ali,根据团队的说法,华为 P40 Pro 是物理按钮,而不是虚拟按钮。能否请您重新确认一下手机的型号?
  • @shirley 抱歉,这是华为 mate 30 pro,不是 p40。

标签: java android kotlin android-support-library huawei-developers


【解决方案1】:

关于如何在 Mate30 Pro 上检测 Activity 中的音量变化事件,您可以通过收听android.media.VOLUME_CHANGED_ACTION 广播来实现。

【讨论】:

  • 我无法在 prod 中使用此操作,因为它不适用于所有设备。其次,它不是 SDK 的一部分,将来可能会被删除。 link
  • 根据团队的说法,目前Android没有定义这样的硬件。这是华为提供的,没有标准接口。如果您不想使用它,可能没有其他方法。 ?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-09
  • 1970-01-01
  • 2019-06-09
相关资源
最近更新 更多