[ROOT] 修改 Smart Key 功能的方法

雖然說 16.1220.1908.189 更新大幅提昇了 Smart Key 的可用性,但三種啟動方式 (按一下/按兩下/按住) 能夠發動的功能都有些為的不同,好比說『按住按鈕』裡面就無法啟動相機,而且也無法執行指定的 app。
當然這限制阻擋不了已經 root 的手機,透過系統內建 content 指令,我們可以自由指定按鈕可以啟用的 app。
首先,先查詢目前手機 Smart Key 設定:
# content query --uri content://com.android.settings.googleassist/google_assist_table/

可以看到總共有六個項目,但實際上 uid=1 跟 uid=4 是一組 (按一下),uid=2 跟 uid=5 是一組 (按兩下),uid=3 跟 uid=6 是一組 (按住按鈕)。前三個是實際上運作時會使用的資料,後三個是設定選單上會顯示的功能。所以實際上你只要改動前三組的值就可以運作,有強迫症的再修改後三組的內容。XD
先看一些重要的欄位:
lockEnable:
0 : 只有在螢幕亮的時候可以使用
currentMode:
0 : 會參考 launchPkg, launchCls, luanchUri 決定要怎麼啟動指定 app
specialAction:
1 : 喚醒 google 助理
所以假設我們想要設定『按住按鈕』為『開啟相機』,那麼我們只要修改 uid=3 與 uid=6 的內容即可。根據前面的說明,可以這麼使用 content 指令:
# content update --uri  content://com.android.settings.googleassist/google_assist_table/3 --bind specialAction:i:11 --bind currentMode:i:5 --bind launchUri:s:NULL --bind launchPkg:s:NULL
--bind specialAction:i:11 代表將 specialAction 這個欄位修改為整數 (i) 數值 11。
--bind currentMode:i:5 代表將 currentMode 這個欄位修改為整數 (i) 數值 5。
--bind launchUri:s:NULL 代表將 launchUri 這個欄位修改為字串 (s) 內容為 NULL,因為怕有先前的設定存留,所以透過設定為 NULL『清空』
--bind launchPkg:s:NULL 代表將 launchPkg 這個欄位修改為字串 (s) 內容為 NULL
依此類推,如果想要啟動指定的 app,我們只需要先知道要啟動哪個 class,再使用 content 修改,比如我們想啟動 com.example.app/.MainActivity:
# content update --uri content://com.android.settings.googleassist/google_assist_table/3 --bind specialAction:i:-1 --bind currentMode:i:0 --bind launchPkg:s:com.example.app --bind launchUri:s:"#Intent;component=com.example.app/.MainActivity;end"

launchUri 的其實就是 Intent 的內容,開頭為 #Intent; ,中間加入 intent 的參數,此為 component 代表指定丟給 com.example.app 裡面的 MainActivity,也可以視需求加入 action 與 category,最後再用 end 做結尾,參數間用分號 ';' 區隔。

至於其他欄位的用途,就等大家來發掘了,感覺可以做出不少神奇的應用。

Happy Hacking ! :)

評論

登錄註冊進行評論。