Android 輸入法設置文章
Android 9.0 添加預置第三方輸入法/設置默認輸入法(軟鍵盤)
前言
在一些Android項目中往往需要預置第三方輸入法或自己的輸入法,這篇文章就簡單講解如何預置第三方輸入法apk及設置默認輸入法
結果展示
在介紹基本的調整方法前,先看看效果圖, 如下
調整方法
- 代碼位置
/frameworks/base/packages/SettingsProvider/res/values/defaults.xml
/frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
/frameworks/base/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java
- 修改步驟
(一) 設置啟用的輸入方法列表 /frameworks/base/packages/SettingsProvider/res/values/defaults.xml
比如我們添加一個輸入法,包名及名稱為:net.myself.inputmethod.swpinyin2/.SWIME,defaults.xml加入兩個字符串常量,設置可選輸入法列表及默認輸入法如下:

1 <string name="enabled_input_methods" translatable="false">net.myself.inputmethod.swpinyin2/.SWIME:com.android.inputmethod.latin/.LatinIME</string>
2 <string name="default_input_method" translatable="false">net.sunniwell.inputmethod.swpinyin2/.SWIME</string>
enabled_input_methods ==> 啟用的輸入方法列表
default_input_method ==> 默認輸入法
(二) 加載到Setings數據庫 /frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
DatabaseHelper.java的loadSecureSettings方法中加入:

1 loadStringSetting(stmt, Settings.Secure.ENABLED_INPUT_METHODS, R.string.enabled_input_methods);
2 loadStringSetting(stmt, Settings.Secure.DEFAULT_INPUT_METHOD, R.string.default_input_method);
(三) 默認授予輸入法必要權限 /frameworks/base/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java
在DefaultPermissionGrantPolicy.java的grantDefaultSystemHandlerPermissions函數中,加入
注:權限根據實際需求修改

1 PackageParser.Package MY_IME2 = getSystemPackage("net.myself.inputmethod.swpinyin2");
2 if(MY_IME2 != null && doesPackageSupportRuntimePermissions(MY_IME2)){
3 grantRuntimePermissions(MY_IME2, MICROPHONE_PERMISSIONS, userId);
4 grantRuntimePermissions(MY_IME2, STORAGE_PERMISSIONS, userId);
5 grantRuntimePermissions(MY_IME2, CONTACTS_PERMISSIONS, userId);
6 grantRuntimePermissions(MY_IME2, LOCATION_PERMISSIONS, userId);
7 grantRuntimePermissions(MY_IME2, CAMERA_PERMISSIONS, userId);
8 grantRuntimePermissions(MY_IME2, PHONE_PERMISSIONS, userId);
9 grantRuntimePermissions(MY_IME2, CALENDAR_PERMISSIONS, userId);
10 }
(四) 將需要預置的輸入法apk預編譯進image,打包,重新燒寫系統
經過如上調整,就可以在Settings中看到添加的第三方輸入法了,而且可以在Android原生輸入法和自己預置的輸入法間切換。
如果不需要Android原生輸入法可以將其直接刪掉。
大功告成!!