十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
創(chuàng)新互聯(lián)建站主打移動(dòng)網(wǎng)站、成都網(wǎng)站制作、做網(wǎng)站、外貿(mào)營(yíng)銷網(wǎng)站建設(shè)、網(wǎng)站改版、網(wǎng)絡(luò)推廣、網(wǎng)站維護(hù)、域名申請(qǐng)、等互聯(lián)網(wǎng)信息服務(wù),為各行業(yè)提供服務(wù)。在技術(shù)實(shí)力的保障下,我們?yōu)榭蛻舫兄Z穩(wěn)定,放心的服務(wù),根據(jù)網(wǎng)站的內(nèi)容與功能再?zèng)Q定采用什么樣的設(shè)計(jì)。最后,要實(shí)現(xiàn)符合網(wǎng)站需求的內(nèi)容、功能與設(shè)計(jì),我們還會(huì)規(guī)劃穩(wěn)定安全的技術(shù)方案做保障。
應(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 。
EVIOCGRAB功能
具體請(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