对于输入法的操作,每个脚本作者都逃不过去的一个坎,对于不同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条评论
快来发表一下你的评论吧 !