前言
在最近的一个项目中需要下载、安装Google输入法并将默认输入法设置为Google输入法。后台下载APP这个就不说了,然后需要静默安装,这个大家可以百度或者Google一下,下载完成自动安装!
第一步打开系统输入法激活页面
Intent intent = new Intent(Settings.ACTION_INPUT_METHOD_SETTINGS);
startActivity(intent);
第二步检测是否激活输入法
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
for(InputMethodInfo imi:imm.getEnabledInputMethodList()){
if(getPackageName().equals(imi.getPackageName())){
return true;
}
}
第三步检测默认输入法
String defaultImme = Settings.Secure.getString(getContentResolver(),Settings.Secure.DEFAULT_INPUT_METHOD);
if(defaultImme!=null&&defaultImme.contains(getPackageName())){
return true;
}
return false;
第四步打开默认输入法选择对话框
((InputMethodManager) getApplicationContext().getSystemService(Context.INPUT_METHOD_SERVICE)).showInputMethodPicker();
问题:无法监听输入法是否激活
子类型如何影响输入
法子类型不会更改输入法服务的行为,因此输入法服务会根据Android框架向其报告的当前启用的子类型来更改其行为。输入法服务可以通过两种方式找出当前启用的子类型:
向输入法管理员询问当前的子类型
从onCurrentInputMethodSubtypeChanged(InputMethodSubtype newSubtype)方法接收回调
要求输入法管理器
输入法管理器是一种系统服务,因此您可以从Android上下文中获取它(InputMethodManager)context.getSystemService(Context.INPUT_METHOD_SERVICE)。一旦你参考了输入法管理器,你可以使用final来询问当前的输入法子类型InputMethodSubtype currentSubtype = richImm.getCurrentInputMethodSubtype();。
Input Method Manager的完整文档可以在这里找到。
子类型更改的侦听器
该onCurrentInputMethodSubtypeChanged(InputMethodSubtype newSubtype)方法可以在输入法服务实现中被覆盖,以处理当前输入法子类型的更改。这可以在输入期间处理子类型的更改,但重要的是不要仅仅依靠此方法。
输入法服务(使用子类型)应始终在onStartInput()或期间检查当前子类型onStartInputView()。
可以通过第二步来得知输入法是否激 然后就是imp服务中的监听回调 无法拿到回调
解决办法
在接收到IMP安装成功之后 跳转设置imp激活 不停的调用方法二来检测是否激活 激活就打开默认imp设置页面 循环检测是否设置成功 成功就回跳到app