rk3399 9.0修改系统默认输入法

本文介绍在RK3399设备上,通过修改系统源代码,将搜狗输入法设置为默认输入法的过程。涉及InputMethodUtils类的改动,以及settings数据库的初始化设置。

在rk3399 9.0中设置搜狗输入法为系统默认输入法

framework/base/core/java/com/android/internal/inputmethod/InputMethodUtils.java
@@ -849,6 +849,7 @@ public class InputMethodUtils {
         private final Resources mRes;
         private final ContentResolver mResolver;
         private final HashMap<String, InputMethodInfo> mMethodMap;
+       private final ArrayList<InputMethodInfo> mMethodList;
 
         /**
          * On-memory data store to emulate when {@link #mCopyOnWrite} is {@code true}.
@@ -918,6 +919,7 @@ public class InputMethodUtils {
             mRes = res;
             mResolver = resolver;
             mMethodMap = methodMap;
+           mMethodList = methodList;
             switchCurrentUser(userId, copyOnWrite);
         }
 
@@ -1043,6 +1045,22 @@ public class InputMethodUtils {
             return enabledSubtypes;
         }
 
+        // At the initial boot, the settings for input methods are not set,
+        // so we need to enable IME in that case.
+        public void enableAllIMEsIfThereIsNoEnabledIME() {
+            if (!TextUtils.isEmpty(getEnabledInputMethodsStr())) {
+                StringBuilder sb = new StringBuilder();
+                final int N = mMethodList.size();
+                for (int i = 0; i < N; i++) {
+                    InputMethodInfo imi = mMethodList.get(i);
+                    Slog.i(TAG, "Adding: " + imi.getId());
+                    if (i > 0) sb.append(':');
+                    sb.append(imi.getId());
+                }
+                putEnabledInputMethodsStr(sb.toString());
+            }
+        } 

 framework/base/packages/SettingsProvider/res/values/defaults.xml

+    <string name="def_enable_input_methods" translatable="false">com.sohu.inputmethod.sogou/.SogouIME</string>
+    <string name="def_input_method" translatable="false">com.sohu.inputmethod.sogou/.SogouIME</string>

framework/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java

+            loadStringSetting(stmt, Settings.Secure.DEFAULT_INPUT_METHOD,
+                    R.string.def_input_method);
+            loadStringSetting(stmt, Settings.Secure.ENABLED_INPUT_METHODS,
+                    R.string.def_enable_input_methods );
 

framework/base/services/core/java/com/android/server/InputMethodManagerService.java
// TODO: The following code should find better place to live.
-        if (!resetDefaultEnabledIme) {
+       /* if (!resetDefaultEnabledIme) {
             boolean enabledImeFound = false;
             boolean enabledNonAuxImeFound = false;
             final List<InputMethodInfo> enabledImes = mSettings.getEnabledInputMethodListLocked();
@@ -3718,7 +3718,7 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
                 }
                 reenableMinimumNonAuxSystemImes = true;
             }
-        }
+        }*/

 

<think>好的,我现在需要帮助用户在RK3568平台上运行的Android 11系统修改默认输入法。根据用户提供的引用资料,我需要综合这些信息,给出一个清晰的步骤指南。 首先,用户引用了几个不同的资源,其中引用[2]、[3]、[4]都涉及到了修改默认输入法的方法。虽然具体的文件路径和变量名有所不同,但基本思路是一致的:在frameworks/base/packages/SettingsProvider的相关文件中添加环境变量来指定默认输入法。 接下来,我需要确定正确的修改位置。引用[2]提到在defaults.xml中添加config_default_input_method,而引用[3]和[4]则使用了def_input_method。这可能是不同版本或定制系统中的差异。考虑到用户的问题是关于RK3568 Android 11的,引用[2]和[3]都是针对RK3568的,所以应该优先参考这些。不过,引用[3]中的变量名是def_input_method,而引用[2]使用的是config_default_input_method,可能需要进一步确认正确的变量名。 查看引用[2],修改的是frameworks/base/packages/SettingsProvider/res/values/defaults.xml文件,添加了config_default_input_method,并且还设置了enabled_input_methods。而引用[3]同样修改defaults.xml,但变量名为def_input_method。引用[4]虽然是针对rk3399,但也使用了类似的变量名。这说明可能存在不同版本或厂商定制的情况。 为了确保正确性,可能需要检查Android 11的官方文档或相关代码库,但根据用户提供的资料,引用[2]和[3]都是针对RK3568的,所以需要确认用户使用的是哪种方法。不过,用户的问题中引用的资料可能存在冲突,因此需要综合判断。例如,引用[2]中的方法更详细,包含了enabled_input_methods的设置,这可能也是必要的步骤,因为需要同时启用输入法并设为默认。 因此,正确的步骤可能包括: 1. 修改defaults.xml文件,添加config_default_input_method和enabled_input_methods。 2. 确保输入法的包名和类名正确。 3. 编译并刷入系统。 同时,需要注意是否需要修改DatabaseHelper.java,如引用[4]中提到的,但引用[2]和[3]没有提到这一点,可能在不同情况下需要不同的处理。不过根据主要引用,可能只需修改defaults.xml即可。 另外,用户可能需要知道如何获取输入法的正确包名和类名,例如通过adb命令查看已安装的输入法。这也是需要补充的信息。 最后,要提醒用户编译系统后的步骤,如重新烧写固件,并验证设置是否生效。</think>根据RK3568 Android11平台特性,修改默认输入法需通过修改系统配置文件实现。以下是详细操作步骤: ### 一、确定输入法包名和类名 使用ADB命令获取已安装输入法的完整组件名: ```bash adb shell ime list -a ``` 输出示例:`com.sogou.inputmethod/.SogouIME` ### 二、修改系统配置文件 1. 打开配置文件: ```xml frameworks/base/packages/SettingsProvider/res/values/defaults.xml ``` 2. 添加双环境变量配置(必须同时设置启用列表和默认项): ```xml <!-- 设置可用输入法列表 --> <string name="enabled_input_methods" translatable="false"> com.android.inputmethod.latin/.LatinIME:com.sogou.inputmethod/.SogouIME </string> <!-- 设置默认输入法 --> <string name="config_default_input_method" translatable="false"> com.sogou.inputmethod/.SogouIME </string> ``` ### 三、编译验证 1. 执行全编译: ```bash make -j8 ``` 2. 烧写新固件后,通过ADB验证: ```bash adb shell settings get secure default_input_method ``` ### 四、兼容性处理 如需支持多用户场景,需在`DatabaseHelper.java`添加加载逻辑(部分定制系统需要): ```java // 在loadSecureSettings()方法内添加 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); ``` **注意事项:** 1. 包名必须与输入法APK的`AndroidManifest.xml`中`<service>`声明一致 2. 修改后必须执行`make clean`清除中间缓存[^2][^3] 3. 第三方输入法需预装到`system/app`或`system/priv-app`目录
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值