Re: [問題] KeyEvent dispatch flow

看板AndroidDev作者 (阿良)時間13年前 (2011/05/09 22:11), 編輯推噓2(205)
留言7則, 3人參與, 最新討論串2/2 (看更多)
今天終於會動作了,提供一點經驗分享 在WindowManagerService.java中constructor private WindowManagerService(Context context, PowerManagerService pm, boolean haveInputMethods) { ... mQueue = new KeyQ(); //產生新的KeyInputQueue //InputDeviceReader Thread為對底層處理 mInputThread = new InputDispatcherThread(); ... mInputThread.start(); ... } 在InputDispatcherThread中做dispatchKey 發現 mKeyWaiter.waitForNextEventTarget回傳mKeyWaiter.CONSUMED_EVENT_TOKEN 當中的findTargetWindow回傳為mKeyWaiter.CONSUMED_EVENT_TOKEN 由findTargetWindow找到mPolicy.interceptKeyTi為回傳true造成 千辛萬苦找到Implement的地方為PhoneWindowManager.java的interceptKeyTi interceptKeyTi中launchHomeFromHotKey做了mKeyguardMediator.isInputRestricted 判斷true造成, mKeyguardMediator.isInputRestricted的 mUpdateMonitor.isDeviceProvisioned是最後元凶 原來它是setting database中的Settings.Secure.DEVICE_PROVISIONED值為0 之後找谷歌發現也有這個問題,因此自己測試兩個可以work方案 1. 在adb shell中 cd /data/data/com.android.providers.settings/ sqlite3 settings.db INSERT INTO secure (name, value) VALUES (‘device_provisioned’, 1); 2. 在Launcher的OnCreate中設定 Settings.Secure.putInt(getContentResolver(),Settings.Secure.DEVICE_PROVISIONED ,1); ※ 引述《oasis316 (阿良)》之銘言: : 開發層: (應用/框架/庫/核心) : 應用/框架 : 問題: : HOME 與 SEARCH key (Not touch button) 無反應 : 輸入: : 按下 HOME 或 SEARCH key : 預期輸出: : 回到 Launcher activity 或是 開始 Search activity : 錯誤輸出: : 無任何反應 : 說明: : 各位先輩大家好,目前遇到某些key無法作用 : 想請教一下key dispatch的一些流程 : 目前trace到的情況是,從底層送過來的key經過keymap轉換後的數值是正確的 : 我在Launcher的activity onKeyDown 印訊息,確認這兩個key是沒有訊息輸出 : 在KeyinputQueue InputDeviceReader Thread 印訊息確認無作用的兩個key : 有產生了KeyEvent class 但是在KeyEvent dispatch method中印訊息是無輸出 : 所以想請問一下KeyEvent的dispatch flow -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 58.115.93.73

05/10 12:28, , 1F
雖然不太清楚是在做什麼,不過推個專業!
05/10 12:28, 1F

05/10 17:47, , 2F
推追問題專業!!
05/10 17:47, 2F

05/31 01:12, , 3F
DEVICE_PROVISIONED是判斷device的有沒有跑過setupwizard
05/31 01:12, 3F

05/31 01:12, , 4F
用過應該就變成1了吧
05/31 01:12, 4F

05/31 01:13, , 5F
我記得activitymanagerservice叫launcher起來的時候
05/31 01:13, 5F

05/31 01:13, , 6F
會先把一個叫做PROVISIONED的ap偷偷叫起來
05/31 01:13, 6F

05/31 01:14, , 7F
這個AP裡面會去把DEVICE_PROVISIONED地值寫成1
05/31 01:14, 7F
文章代碼(AID): #1Dn_OlWD (AndroidDev)
討論串 (同標題文章)
文章代碼(AID): #1Dn_OlWD (AndroidDev)