溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

關(guān)于linux input device輸入子系統(tǒng)架構(gòu)及android中的框架

發(fā)布時(shí)間:2020-07-01 10:21:43 來源:網(wǎng)絡(luò) 閱讀:1245 作者:GaoNeil 欄目:移動(dòng)開發(fā)

關(guān)于linux input device輸入子系統(tǒng)架構(gòu)及android中的框架

關(guān)于linux input device輸入子系統(tǒng)架構(gòu)及android中的框架

應(yīng)用app和windowmanagerservice的input event通信方式

在Native層的InputChannel就是一個(gè)通道,僅僅是一個(gè)通道,僅僅具有通信功能,不包含其他的。至于從數(shù)據(jù)流動(dòng)方向,與InputChannel無關(guān)。數(shù)據(jù)流向是由InputPublisher和InputConsumer在組合了InputChannel后決定的。
把InputChannel由應(yīng)用程序傳遞到WindowManageService的過程,涉及到的是Binder通信,不是文章的重點(diǎn),不多說。需要知道的是,mWindowSession.addToDisplay最后會(huì)傳遞到WindowManagerService的addWindow方法。通過代碼看看InputChannel是如何使用的,代碼如下:
1 public int addWindow(Session session, IWindow client, int seq,
2 WindowManager.LayoutParams attrs, int viewVisibility, int displayId,
3 Rect outContentInsets, InputChannel outInputChannel) {
4 …
5 if (outInputChannel != null && (attrs.inputFeatures
6 & WindowManager.LayoutParams.INPUT_FEATURE_NO_INPUT_CHANNEL) == 0) {
7 //這個(gè)名字是根據(jù)對(duì)象的hashcode和窗口的一些屬性轉(zhuǎn)化為字符串后建立的。
8 String name = win.makeInputChannelName();
9 InputChannel[] inputChannels = InputChannel.openInputChannelPair(name);
10 win.setInputChannel(inputChannels[0]);
11 inputChannels[1].transferTo(outInputChannel);
12 mInputManager.registerInputChannel(win.mInputChannel, win.mInputWindowHandle);
13 }
14 …
15 }

需要注意的是,InputDispatcher.cpp除了會(huì)向PhoneWindowManager.java傳遞KeyEvent外,例如SW_LID.
正方向傳遞,還會(huì)反方向查詢policy。PhoneWindowManager.java作為android.policy的一分子。參見PhoneWindowManager.java:: interceptKeyBeforeDispatching() 和PhoneWindowManager.java:: interceptKeyBeforeQueueing()。 通過返回的ACTION_PASS_TO_USER等來判斷是否需要發(fā)給app,另外還會(huì)查找有無focus app,然后發(fā)給它。在SW_LID為L(zhǎng)ID_CLOSE時(shí)屏幕變黑,此時(shí)一般按鍵是不會(huì)傳到Application的,如果想傳特定按鍵,那么需要更改InputDispatcher::dispatchKeyLocked()函數(shù)的邏輯,見dropReason 。

關(guān)于linux input device輸入子系統(tǒng)架構(gòu)及android中的框架

EVIOCGRAB功能

關(guān)于linux input device輸入子系統(tǒng)架構(gòu)及android中的框架

關(guān)于linux input device輸入子系統(tǒng)架構(gòu)及android中的框架

具體請(qǐng)參考我的免費(fèi)的linux各種驅(qū)動(dòng)開發(fā)課程如下:
https://edu.51cto.com/course/17138.html

另外我的相關(guān)培訓(xùn)視頻請(qǐng)看:
歡迎觀看我發(fā)布的各個(gè)課程: https://edu.51cto.com/lecturer/8896847.html

我的新的更多優(yōu)惠的打包課程鏈接如下:
https://edu.51cto.com/sd/0a9d4

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI