由于是默认系统语言改成了中文,输入法也需要对应的改成中文输入。设置过程分成两部分,一个是 adb,另一个是代码设置。在此,简单记录下。
adb 命令
如果像我一样不知道输入法的具体包名可以首先通过 adb 查看及测试。命令如下:
已安装的输入法列表 | adb shell ime list -s |
获取系统默认输入法 | adb shell settings get secure default_input_method |
设置系统默认输入法 | adb shell settings put secure default_input_method com.emoji.keyboard.touchpal.go/com.cootek.smartinput5.TouchPalIME |
获取系统已打开输入法 | adb shell settings get secure enabled_input_methods |
设置已打开输入法,多个输入法用":"隔开 | adb shell settings put secure enabled_input_methods com.emoji.keyboard.touchpal.go/com.cootek.smartinput5.TouchPalIME: com.android.inputmethod.latin/.LatinIME |
例如:
代码设置
主要修改的文件目录位于 frameworks/base/ :
packages/SettingsProvider/res/values/defaults.xml
packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
diff --git a/packages/SettingsProvider/res/values/defaults.xml b/packages/SettingsProvider/res/values/defaults.xml
index ecf8180..114341b 100644
--- a/packages/SettingsProvider/res/values/defaults.xml
+++ b/packages/SettingsProvider/res/values/defaults.xml
@@ -17,6 +17,9 @@
*/
-->
<resources>
+ <!-- 设置默认输入法 -->
+ <string name="config_enabled_input_methods" translatable="false">com.emoji.keyboard.touchpal.go/com.cootek.smartinput5.TouchPalIME:com.android.inputmethod.latin/.LatinIME</string>
+ <string name="config_default_input_method" translatable="false">com.emoji.keyboard.touchpal.go/com.cootek.smartinput5.TouchPalIME</string>
<!-- 设置默认语言 -->
<string name="def_system_locales" translatable="false">zh-Hans-CN,en-US</string>
<bool name="def_dim_screen">true</bool>
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java b/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
index f3a2fd8..9409987 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
@@ -2359,6 +2359,13 @@ class DatabaseHelper extends SQLiteOpenHelper {
loadSecure35Settings(stmt);
+ loadStringSetting(stmt, Settings.Secure.ENABLED_INPUT_METHODS,
+ R.string.config_enabled_input_methods);
+
+ loadStringSetting(stmt, Settings.Secure.DEFAULT_INPUT_METHOD,
+ R.string.config_default_input_method);
+
loadBooleanSetting(stmt, Settings.Secure.MOUNT_PLAY_NOTIFICATION_SND,
R.bool.def_mount_play_notification_snd);
感觉通过 adb 命令执行成功了,基本也就成功了。
还有个关于输入法权限的,方法如下,感兴趣的可以试试。
/frameworks/base/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java 的 grantDefaultSystemHandlerPermissions 函数中,加入以下代码,注意包名修改为自己实际的。
--- a/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java
+++ b/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java
@@ -435,6 +435,14 @@ public final class DefaultPermissionGrantPolicy {
String[] calendarSyncAdapterPackages = (syncAdapterPackagesProvider != null) ?
syncAdapterPackagesProvider.getPackages(CalendarContract.AUTHORITY, userId) : null;
+ // TouchPal
+ PackageInfo touchpal = getPackageInfo("com.emoji.keyboard.touchpal.go");
+ if (touchpal != null && doesPackageSupportRuntimePermissions(touchpal)) {
+ grantPermissionsToPackage(
+ touchpal, userId, false, true, true,
+ PHONE_PERMISSIONS, CONTACTS_PERMISSIONS, STORAGE_PERMISSIONS);
+ }
+
最后,感谢以下文章对我的帮助,感谢~
Android 9.0 添加预置第三方输入法/设置默认输入法(软键盘)_mob604756ff20da的技术博客_51CTO博客