0

...因为我需要修改源以使用游戏手柄实现类似的控制。

4

1 回答 1

1

在 Android 中有一个MotionEvent类和一个KeyEvent类描述了多种用户输入事件。InputManagerService将负责生成这些事件

例如,如果我需要为 android 生成一个滑动事件。我可以简单地获取一个 MotionEvent,然后通过 InputManagerService 将其注入到 android。

MotionEvent event = MotionEvent.obtain(when, when, action, x, y, pressure, DEFAULT_SIZE,DEFAULT_META_STATE, DEFAULT_PRECISION_X, DEFAULT_PRECISION_Y, DEFAULT_DEVICE_ID,DEFAULT_EDGE_FLAGS);
event.setSource(inputSource);
InputManager.getInstance().injectInputEvent(event,InputManager.INJECT_INPUT_EVENT_MODE_WAIT_FOR_FINISH);

实际上我是从Input.java得到这个源代码的,它还展示了如何将用户输入注入 Android 的其他示例。

然后将目光移到 InputManagerService 上。injectInputEvent 是一个本地方法,它最终依赖InputDispatcher将事件排入队列并调度它们。然后它将在 Window 和 InputManager 之间创建一个名为InputChannel的管道,以将事件分派到目标窗口。

于 2013-04-02T04:19:18.390 回答