Re: [問題] KeyEvent dispatch flow
今天終於會動作了,提供一點經驗分享
在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
05/31 01:12, 3F
→
05/31 01:12, , 4F
05/31 01:12, 4F
→
05/31 01:13, , 5F
05/31 01:13, 5F
→
05/31 01:13, , 6F
05/31 01:13, 6F
→
05/31 01:14, , 7F
05/31 01:14, 7F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
AndroidDev 近期熱門文章
PTT數位生活區 即時熱門文章