對于輸入法的操作,每個腳本作者都逃不過去的一個坎,對于不同APP上的搜索框,亦或者是各種消息發送框...咳咳~都需要用到輸入法上的操作, 搜索和發送兩個按鈕, 其實觸發的都是回車按鈕,但是如果直接使用腳本發送KeyCode碼,也不會觸發這個回車按鈕.所以只能使用第三方輸入法來實現,目前已知的可用腳本輸入法,有萌歆制作的一個叫腳本輸入法的app, 和 無名小姐魔改的百度輸入法,這兩個輸入法,都在應用內,添加了一個靜態的事件監聽,從而使外部的APP發送一條廣播來觸發輸入法上的按鈕功能.
百度輸入法修改后, 有幾十兆大小. 而萌歆的腳本輸入法,只有一兩兆大小,所以,如果你像我這種,不太喜歡用百度產品的人, 肯定是會選擇多安裝一種輸入法來備用,對于安卓11之上的系統用戶來說, autojsPro提供了一個方法來快速切換當前手機上的輸入法.那么對低于安卓11的手機來說,就不是那么簡單了, 因為沒有足夠的權限,來切換輸入法了~
不過我們可以使用adb去給app授予系統權限,注意,這里的授予權限并不是一次性的,而是 授予后,只要你沒有卸載或者清除APP所有的數據,那么這個權限是永久存在的,即便是你重啟了手機,也無所謂 .所以我比較推薦使用這種方式.
那么你可以通過下面這條命令,在電腦上對手機上的autojs進行授權.
adb shell pm grant org.autojs.autojspro android.permission.WRITE_SECURE_SETTINGS
adb shell pm grant 后面跟的是你要授權APP的包名,然后后面的是要授予的權限.
當你授權完畢后, 就可以使用AutojsPro自身來切換已經安裝的輸入法了.那么具體的方法:
importClass( "android.content.Context" );
// 要切換輸入法的包名/服務的類名, 如果服務類名中包含包名那么包名可以替換成 . 來代替
// 例如 com.sohu.inputmethod.sogou.xiaomi/com.sohu.inputmethod.sogou.xiaomi.SogouIME
// 可以寫成 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 );
下面的代碼可以獲取到當前手機已安裝輸入法的包名和服務類名:
//注意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);
最后,對于代碼中的這一句代碼來說, 有人說必須有token傳入,才可以切換輸入法,但是我在我的平板上使用切換輸入法時,直接傳入的null,也可以成功的切換輸入法,這里的token代表的是什么,我沒有再往深處研究,如果你們傳入null后,無法切換輸入法,那再探討一下這個token的作用吧.
另外還有一種彈窗切換的方式可供選擇, 這種方式不需要有系統權限即可實現.
imm.showInputMethodPicker();
-
輸入法
+關注
關注
0文章
48瀏覽量
9681 -
APP
+關注
關注
33文章
1573瀏覽量
72439 -
腳本
+關注
關注
1文章
389瀏覽量
14858
發布評論請先 登錄
相關推薦
評論