admin管理员组

文章数量:1562466

需求描述

使用第三方输入法APK替换Android系统原生输入法

需求分析

默认输入法:packages/inputmethods/LatinIME

替换默认输入法方法
1.内置apk到系统:Android.mk编译到系统即可
2.修改源码

frameworks/base/packages/SettingsProvider/res/values/defaults.xml
//修改"def_input_method" "def_enable_input_methods"

<string name="def_input_method" translatable="false">com.xinshuru.inputmethod/.FTInputService</string>
<string name="def_enable_input_methods" translatable="false">com.xinshuru.inputmethod/.FTInputService</string>
frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
//修改loadSecureSettings()

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);

3.如何查找"def_input_method" “def_enable_input_methods”
下载的第三方输入法apk,通过反编译获取其AndroidManifest.xml
查找其中的services,例如讯飞输入法:com.iflytek.inputmethod/.FlyIME

<service
android:icon="@ref/0x7f020000"
android:name="com.iflytek.inputmethod.FlyIME"
android:permission="android.permission.BIND_INPUT_METHOD"
android:exported="false"
android:taskAffinity="com.iflytek.inputmethod"
android:allowBackup="false">
解决方案
diff --git a/frameworks/base/packages/SettingsProvider/res/values/defaults.xml b/frameworks/base/packages/SettingsProvider/res/values/defaults.xml
index 08f638c..e6a4b66 100755
--- a/frameworks/base/packages/SettingsProvider/res/values/defaults.xml
+++ b/frameworks/base/packages/SettingsProvider/res/values/defaults.xml
@@ -289,13 +289,17 @@
     <!-- Default Input Method, its value is from inputmethod's package name and main class name
         such as "com.android.inputmethod.pinyin/.PinyinIME"
     -->
-    <string name="def_input_method" translatable="false"></string>
+    <string name="def_input_method" translatable="false">com.xinshuru.inputmethod/.FTInputService</string>
     <!--
         Default Enable InputMethods, its value is from inputmethod's package name and main class
         name such as "com.android.inputmethod.pinyin/.PinyinIME" ;This is a string
         containing the IDs of all enabled input methods, each ID separated by ':'.
     -->
-    <string name="def_enable_input_methods" translatable="false"></string>
+    <string name="def_enable_input_methods" translatable="false">com.xinshuru.inputmethod/.FTInputService</string>
     <!-- Default for Settings.Global.CAPTIVE_PORTAL_DETECTION_ENABLED -->
     <integer name="def_captive_portal_detection_enabled" translatable="false">0</integer>
diff --git a/frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java b/frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
index 1117ff0..8e9025e 100755
--- a/frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
+++ b/frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
@@ -2558,6 +2558,13 @@ class DatabaseHelper extends SQLiteOpenHelper {
             loadIntegerSetting(stmt, Settings.Secure.SLEEP_TIMEOUT,
                     R.integer.def_sleep_timeout);

+            //<!-- add for default input method
+            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);
+            //add for default input method -->
+
             /*
              * IMPORTANT: Do not add any more upgrade steps here as the global,
              * secure, and system settings are no longer stored in a database

本文标签: 输入法系统android