结果展示
在介绍基本的调整方法前,先看看效果图, 如下
调整方法
- 代码位置
/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加入两个字符串常量,设置可选输入法列表及默认输入法如下:
<string name="enabled_input_methods" translatable="false">net.myself.inputmethod.swpinyin2/.SWIME:com.android.inputmethod.latin/.LatinIME</string> <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方法中加入:
loadStringSetting(stmt, Settings.Secure.ENABLED_INPUT_METHODS, R.string.enabled_input_methods); 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函数中,加入
PackageParser.Package MY_IME2 = getSystemPackage("net.myself.inputmethod.swpinyin2"); if(MY_IME2 != null && doesPackageSupportRuntimePermissions(MY_IME2)){ grantRuntimePermissions(MY_IME2, MICROPHONE_PERMISSIONS, userId); grantRuntimePermissions(MY_IME2, STORAGE_PERMISSIONS, userId); grantRuntimePermissions(MY_IME2, CONTACTS_PERMISSIONS, userId); grantRuntimePermissions(MY_IME2, LOCATION_PERMISSIONS, userId); grantRuntimePermissions(MY_IME2, CAMERA_PERMISSIONS, userId); grantRuntimePermissions(MY_IME2, PHONE_PERMISSIONS, userId); grantRuntimePermissions(MY_IME2, CALENDAR_PERMISSIONS, userId); }
注:权限根据实际需求修改
(四) 将需要预置的输入法apk预编译进image,打包,重新烧写系统
经过如上调整,就可以在Settings中看到添加的第三方输入法了,而且可以在Android原生输入法和自己预置的输入法间切换。
如果不需要Android原生输入法可以将其直接删掉。
大功告成!!