對(duì)于輸入法的操作,每個(gè)腳本作者都逃不過(guò)去的一個(gè)坎,對(duì)于不同APP上的搜索框,亦或者是各種消息發(fā)送框...咳咳~都需要用到輸入法上的操作, 搜索和發(fā)送兩個(gè)按鈕, 其實(shí)觸發(fā)的都是回車(chē)按鈕,但是如果直接使用腳本發(fā)送KeyCode碼,也不會(huì)觸發(fā)這個(gè)回車(chē)按鈕.所以只能使用第三方輸入法來(lái)實(shí)現(xiàn),目前已知的可用腳本輸入法,有萌歆制作的一個(gè)叫腳本輸入法的app, 和 無(wú)名小姐魔改的百度輸入法,這兩個(gè)輸入法,都在應(yīng)用內(nèi),添加了一個(gè)靜態(tài)的事件監(jiān)聽(tīng),從而使外部的APP發(fā)送一條廣播來(lái)觸發(fā)輸入法上的按鈕功能.
百度輸入法修改后, 有幾十兆大小. 而萌歆的腳本輸入法,只有一兩兆大小,所以,如果你像我這種,不太喜歡用百度產(chǎn)品的人, 肯定是會(huì)選擇多安裝一種輸入法來(lái)備用,對(duì)于安卓11之上的系統(tǒng)用戶(hù)來(lái)說(shuō), autojsPro提供了一個(gè)方法來(lái)快速切換當(dāng)前手機(jī)上的輸入法.那么對(duì)低于安卓11的手機(jī)來(lái)說(shuō),就不是那么簡(jiǎn)單了, 因?yàn)闆](méi)有足夠的權(quán)限,來(lái)切換輸入法了~
不過(guò)我們可以使用adb去給app授予系統(tǒng)權(quán)限,注意,這里的授予權(quán)限并不是一次性的,而是 授予后,只要你沒(méi)有卸載或者清除APP所有的數(shù)據(jù),那么這個(gè)權(quán)限是永久存在的,即便是你重啟了手機(jī),也無(wú)所謂 .所以我比較推薦使用這種方式.
那么你可以通過(guò)下面這條命令,在電腦上對(duì)手機(jī)上的autojs進(jìn)行授權(quán).
adb shell pm grant org.autojs.autojspro android.permission.WRITE_SECURE_SETTINGS
adb shell pm grant 后面跟的是你要授權(quán)APP的包名,然后后面的是要授予的權(quán)限.
當(dāng)你授權(quán)完畢后, 就可以使用AutojsPro自身來(lái)切換已經(jīng)安裝的輸入法了.那么具體的方法:
importClass( "android.content.Context" );
// 要切換輸入法的包名/服務(wù)的類(lèi)名, 如果服務(wù)類(lèi)名中包含包名那么包名可以替換成 . 來(lái)代替
// 例如 com.sohu.inputmethod.sogou.xiaomi/com.sohu.inputmethod.sogou.xiaomi.SogouIME
// 可以寫(xiě)成 com.sohu.inputmethod.sogou.xiaomi/.SogouIME
let NewInputMethodName = "com.sohu.inputmethod.sogou.xiaomi/.SogouIME";
let imm = context.getSystemService( Context.INPUT_METHOD_SERVICE );
imm.setInputMethod( null, NewInputMethodName );
下面的代碼可以獲取到當(dāng)前手機(jī)已安裝輸入法的包名和服務(wù)類(lèi)名:
//注意imm等同于上面的imm
let list = imm.getInputMethodList();
let inputMethodInfo = {};
for ( let i in list ) {
let inputInfo = list.get(i);
let inputPackageName = inputInfo.getPackageName();
let inputServiceName = inputInfo.getServiceName();
inputMethodInfo[ "input"+i ] = {};
inputMethodInfo[ "input"+i ].packageName = inputPackageName;
inputMethodInfo[ "input"+i ].serviceName = inputServiceName;
}
console.log( inputMethodInfo );
imm.setInputMethod(IBinder token, NewInputMethodName);
最后,對(duì)于代碼中的這一句代碼來(lái)說(shuō), 有人說(shuō)必須有token傳入,才可以切換輸入法,但是我在我的平板上使用切換輸入法時(shí),直接傳入的null,也可以成功的切換輸入法,這里的token代表的是什么,我沒(méi)有再往深處研究,如果你們傳入null后,無(wú)法切換輸入法,那再探討一下這個(gè)token的作用吧.
另外還有一種彈窗切換的方式可供選擇, 這種方式不需要有系統(tǒng)權(quán)限即可實(shí)現(xiàn).
imm.showInputMethodPicker();
-
輸入法
+關(guān)注
關(guān)注
0文章
48瀏覽量
9681 -
APP
+關(guān)注
關(guān)注
33文章
1573瀏覽量
72438 -
腳本
+關(guān)注
關(guān)注
1文章
389瀏覽量
14858
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論