系统内置了搜狗输入法,但有时候系统起来后输入法不是搜狗,客户很捉急,因此只好百度了一下下,参考大神们的教程。
我这使用的代码是Android 6.0的,在SettingsProvider没有找到配置项,我记得以前Android 4.2上是有写配置项的,可Android 6.0中竟然没有,,无语了。(SettingsProvider这块代码目前没有看过,后续有机会瞧一瞧)
废话少说,直接进入正题。
1、新增输入法默认值
路径:android_6_0_frameworks\base\packages\SettingsProvider\res\values\defaults.xml
在defaults.xml新增一个string
<string name="default_Enable_Input_Methods">com.android.inputmethod.latin/.LatinIME:com.sohu.inputmethod.sogou/.SogouIME</string>
上面红色部分就是输入法的服务,我用的是搜狗。
这里附上国内比较大众的输入配置
百度:com.baidu.input/.ImeService
讯飞:com.iflytek.inputmethod/.FlyIME
腾讯:com.tencent.qqpinyin/.QQPYInputMethodService
谷歌:com.google.android.inputmethod.pinyin/.PinyinIME
搜狗:com.sohu.inputmethod.sogou/.SogouIME
触宝:com.cootek.smartinput5/.TouchPalIME
需要不同的输入法只要修改红色部分即可。
2、输入法默认值写入系统
路径:android_6_0_frameworks\base\packages\SettingsProvider\src\com\android\providers\settings\DatabaseHelper.java
在loadSecureSettings()方法中新增红色部分代码即可。
private void loadSecureSettings(SQLiteDatabase db) {
SQLiteStatement stmt = null;
try {
......
【把默认值写入系统数据库】
loadStringSetting(stmt, Settings.Secure.ENABLED_INPUT_METHODS,
R.string.default_Enable_Input_Methods);
} finally {
if (stmt != null) stmt.close();
}
}
注意上面红色字体,这里使用的是Settings.Secure.ENABLED_INPUT_METHODS
下面简单说说这两的区别
loadStringSetting(stmt, Settings.Secure.ENABLED_INPUT_METHODS, R.string.def_input_method);
loadStringSetting(stmt, Settings.Secure.DEFAULT_INPUT_METHOD, R.string.def_input_method);
这样建立起数据库,属性为ENABLED_INPUT_METHODS设置完后,这样在安卓settings中,对应的输入法是打钩的,设置多个就打钩多个;属性为DEFAULT_INPUT_METHOD设置完后,其对应的输入法就是为默认的输入法了。
网上有说,更改语言后输入法也会被改变,这个我这里没有试到。如果你的有出现,可以文章末尾的链接修改。
本文参考《Android7.0更换系统默认输入法》和《Android 修改默认输入法》