Android Q - 设置默认输入法

由于是默认系统语言改成了中文,输入法也需要对应的改成中文输入。设置过程分成两部分,一个是 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博客

android修改默认输入法 - petercao - 博客园

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值