2

有谁知道如何从 Android NDK 捕获操纵杆事件?

NDK 不包含任何让我从 AMotionEvent 中提取轴信息的 API。(AXIS_X 和 AXIS_Y 映射到指针 (x,y) 对,但我需要的不止这些。)有 Java API 可以做到这一点……但是当我使用 NDK 时,事件不会传递给 Java -land,所以我从来没有收到过它们。

而且我还没有找到将 NDK AMotionEvent 转换为 Java MotionEvent 的任何方法,以便我可以通过 JNI 将其传递给 Java 并以这种方式提取信息。

我绝对必须为我的应用程序获取操纵杆信息,但到目前为止,无论多么邪恶,我都找不到这样做的方法。有任何想法吗?

4

1 回答 1

1

Nvidia Tegra 的人员通过使用未记录的函数调用设法做到了这一点。他们在 libandroid.so 上执行 dlopen 和 dlsym 以查找 AMotionEvent_getAxisValue()

void* lib = dlopen("libandroid.so",0);
...
s_AMotionEvent_getAxisValue = (float(*)(const AInputEvent*,int32_t axis, size_t pointer_index))
        dlsym(lib,"AMotionEvent_getAxisValue");

有关更多信息,您应该参考Tegra Android 开发包中的 nvidias android 示例

于 2012-12-22T21:04:39.437 回答