【问题标题】:Android NDK Input SourcesAndroid NDK 输入源
【发布时间】:2018-08-09 05:41:59
【问题描述】:

我有一个原生 C++ Android 应用程序。

我正在使用AINPUT_SOURCE 枚举在输入事件进入我的本地活动时对其进行过滤。目前,我只关心AINPUT_SOURCE_TOUCHSCREEN (0x1002)

这似乎适用于 99% 的设备,但摩托罗拉 Moto G6 Plus 不符合此标准。

G6 将输入源报告为 0x5002。无论您点击多少次触摸屏,设备都不会发送实际的触摸屏输入事件。

在 G6 用户数月报告无法玩我的游戏之后,我只能通过自己购买一个来发现这一点。

官方的 Android NDK 参考网站甚至没有列出带有值 (0x5002) 的输入源。

我环顾四周,似乎没有关于这个问题的任何讨论。

还有其他我应该知道的 AINPUT_SOURCE 类型吗?未在 NDK 参考中列出的那些。

我希望能够继续使用这些标志来保持我的触摸输入代码与键盘、鼠标、控制器按钮等分开。

谢谢!

Android NDK 输入参考:

https://developer.android.com/ndk/reference/group/input

【问题讨论】:

    标签: android c++ input android-ndk motorola


    【解决方案1】:

    这些是 ENUM,因此您必须以这种方式计算它们:5002 由 0x02 + 0x1000 + 0x4000 = 触摸屏 + 手写笔 + 按钮组成。该设备似乎有一个手写笔和一个按钮,因此您将获得所有这三件事的事件。要检查设备是否支持 TOUCHSCREEN,您只需执行“founded_flag & 0x1000 == 0x1000”,如果此检查为您提供 TRUE 值,则该设备支持常见的触摸屏行为。

    【讨论】:

    • 啊,我明白我现在需要做什么了。感谢你的快速回复。注意我认为这些值实际上是或在一起的,而不是相加的。 0x1002 || 0x4002 = 0x5002。如果没有你的回答,我永远不会看到这个。
    猜你喜欢
    • 1970-01-01
    • 2012-03-19
    • 1970-01-01
    • 1970-01-01
    • 2013-02-13
    • 2012-08-30
    • 1970-01-01
    • 2012-11-22
    • 2016-05-20
    相关资源
    最近更新 更多