android - 在 Samsung Galaxy Watch 4 (Android Wear OS) 上检测长按键

标签 android wear-os keyboard-events

我为运行 Wear OS 的 watch 编写了一个航海应用程序。航海 watch 经常弄湿,所以我禁用了屏幕并使用物理按键(单次和多次按键)导航菜单。到目前为止一切顺利

我现在正在尝试检测长按物理键(用于紧急人员落水功能),但到目前为止,我一直无法找到任何事件在 Samsung Galaxy Watch 4 上按住物理键。

谁能建议如何检测 Samsung Galaxy Watch 4 上的长按?

大部分按键检测都可以通过覆盖onKeyDown()来完成

    override fun onKeyDown(keyCode: Int, event: KeyEvent): Boolean {
        return if (keyCode == bottomKeyCode) {
            // process bottomKeyPress
            writeToLog("onKeyDown()")
            event.startTracking() // required to enable LongPress (works on TicWatch NOT Samsung)
            true
        } else
            super.onKeyDown(keyCode, event)
    }

在 Samsung Galaxy Watch 4 上,短按会触发 onKeyDown() 事件

问题是按住该键时没有事件被触发。按住键不会触发 onKeyDownonKeyLongPress。它甚至不会在释放按键时触发 onKeyUp!

进一步测试

我也看过 dispatchKeyEvent()

    override fun dispatchKeyEvent(event: KeyEvent): Boolean {
        writeToLog("dispatchKeyEvent() keyCode ${event.keyCode} keyAction ${event.action}")
        return super.dispatchKeyEvent(event)
    }

这也不成功

我已在 Ticwatch Pro 3 GPS(Wear OS 2)上运行代码,其行为“更接近”Android 文档中的描述。当键被第一次按下时 onKeyDown() 被触发。继续按住键会在 350 毫秒后触发第二个 onKeyDown()。随后每 50 毫秒发送一次更多的 onKeyDown() 事件(连同 onLongKeyPress())。因此,在 TicWatch 上实现长按键检测的最简单方法是简单地计算 onKeyDown() 事件的数量(为了避免不需要的 onLongKeyPress() 事件,只需删除 event.startTracking())。

请注意,三星 Galaxy Watch 4 使用 keyCode == KeyEvent.KEYCODE_BACK 作为底部物理键,而不是使用 KeyEvent.KEYCODE_STEM_1 的 Ticwatch。为了完整起见,我调查了 onBackPressed() 但这也没有被触发

    override fun onBackPressed() {
        writeToLog("onBackPressed()")
        super.onBackPressed()
    }

最佳答案

三星终于回应,正式答复是不支持长按

遗憾的是,无法从 Samsung Galaxy Watch 4 发送长按键事件。

watch 4 的两个硬件按钮(称为 Home 键和返回键)都是系统键。

根据三星的政策,在系统 key 的情况下,第 3 方无法获取 watch 4 设备的 KeyEvent。

事实上,第 3 方应用程序有可能访问 onKeyDown() 事件(如原始问题所示),前提是它只是一个短按

如果按住返回键,则 watch 不会触发 onKeyDown() 事件(这意味着任何使用计时器模拟 onLongKeyPress() 事件的尝试也将失败)

关于android - 在 Samsung Galaxy Watch 4 (Android Wear OS) 上检测长按键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70537769/

相关文章:

android - Android 中的 QR 码 Zxing 库

android - Android Wear 5.1.1 是否支持直接互联网连接?

android - 是否可以在 Android Wear 应用程序中使用自定义字体(字体)

c# - 在不按下键盘键的情况下触发键盘按键事件

JavaFX:如何同时移动 2 个矩形?

android - 我可以在更新完成后删除名为 ".AndroidStudio3.0"的文件夹吗?

java - Android 上的 WebView 和 Cookie

textarea - Elm - textarea 选择范围消失

android - 我应该使用哪个 View 来显示仅包含背景颜色的小方 block ,以显示颜色预览?

android - 如何使用蓝牙将传感器数据从 Android Wear 直接发送到 PC