2013-03-27 89 views

回答

1

有一個MotionEvent類和一個KeyEvent類描述Android中的多種用戶輸入事件。 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的管道,以將事件分派到目標窗口。

+0

injectInputEvent()是平臺應用程序可用的東西,因爲它們是作爲AOSP代碼的一部分構建的。由於安全原因,api對於sdk應用程序是隱藏的。 – videoguy 2014-07-11 16:44:49