看板 AndroidDev 關於我們 聯絡資訊
今天終於會動作了,提供一點經驗分享 在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
sorrel20567:雖然不太清楚是在做什麼,不過推個專業! 05/10 12:28
tomap41017:推追問題專業!! 05/10 17:47
blooker:DEVICE_PROVISIONED是判斷device的有沒有跑過setupwizard 05/31 01:12
blooker:用過應該就變成1了吧 05/31 01:12
blooker:我記得activitymanagerservice叫launcher起來的時候 05/31 01:13
blooker:會先把一個叫做PROVISIONED的ap偷偷叫起來 05/31 01:13
blooker:這個AP裡面會去把DEVICE_PROVISIONED地值寫成1 05/31 01:14