前言
需求:因为安卓自带的AOSP键盘无法输入中文,所以内置一个第三方输入法并直接修改为默认的输入法来解决问题
提示:以下是本篇文章正文内容,下面案例可供参考
一、首先获取输入法的包名
在将输入法内置到系统之前,可以通过手动安装的方式,获取输入法的包名和类名,我这里是使用搜狗输入法。
1.使用ime list命令查看输入法包名类名
adb shell ime list -s
得到如下两个输入法的包名和类名
可以看到com.sohu.inputmethod.sogou/.SogouIME就是我们要的,
ps:有个坑:一定要完整的带上/.而不是直接com.sohu.inputmethod.sogou.SogouIME因为这是有关权限的服务,你填错代码就无效了…
二、输入法内置进系统
1.放入客制化目录
将输入法apk文件添加至vendor\rockchip\common\apps目录下,并修改.mk文件,各个厂商的内置方式都不同,我这里就不演示了。
三、修改环境变量
在目录frameworks\base\packages\SettingsProvider\res\values\defaults.xml
添加环境变量config_default_input_method,指定变量值为输入法的包名和类名。修改内容如下:
<!-- add by LQX -->
<!--输入法的列表-->
<string name="enabled_input_methods" translatable="false">com.android.inputmethod.latin/.LatinIME:com.sohu.inputmethod.sogou/.SogouIME</string>
<!--默认输入法-->
<string name="config_default_input_method" translatable="false">com.sohu.inputmethod.sogou/.SogouIME</string>
<!-- end, add by LQX -->
四、设置为默认输入法
路径:frameworks\base\packages\SettingsProvider\src\com\android\providers\settings\DatabaseHelper.java
在设置源码中,指定config_default_input_method为要设置的输入法。修改内容如下:
private void loadSecureSettings(SQLiteDatabase db) {
SQLiteStatement stmt = null;
try {
stmt = db.compileStatement("INSERT OR IGNORE INTO secure(name,value)"
+ " VALUES(?,?);");
.....
loadIntegerSetting(stmt, Settings.Secure.SLEEP_TIMEOUT,
R.integer.def_sleep_timeout);
//By-LQX
loadStringSetting(stmt, Settings.Secure.ENABLED_INPUT_METHODS, R.string.enabled_input_methods);
loadStringSetting(stmt, Settings.Secure.DEFAULT_INPUT_METHOD, R.string.config_default_input_method);
//By-LQX
/*
* IMPORTANT: Do not add any more upgrade steps here as the global,
* secure, and system settings are no longer stored in a database
* but are kept in memory and persisted to XML.
*
* See: SettingsProvider.UpgradeController#onUpgradeLocked
*/
} finally {
if (stmt != null) stmt.close();
}
}
五、测试输入法是否为默认
adb命令查看系统默认输入法
adb shell settings get secure default_input_method
总结
至此教程结束。