做了一年多的ROM定制开发工作,项目上时常会碰到客户要求预置第三方输入法,或者默认勾选某个输入法,甚至默认使用某个输入法的需求。
默认勾选:就是在所有输入法列表哪里默认勾选某个输入法,勾选中之后,它才会出现在输入法选择的Dialog中。 默认使用:就是在需要输入文本时,默认弹出来的那个输入法。
一旦涉及到默认勾选,或者默认使用,那就要知道那个输入法的 PackageName 和 ServiceName 了。不管熟不熟悉输入法知识,只要会用DDMS的强大功能,那么 PackageName 就很好搞到了。而这个 ServiceName 可能就让很多不熟悉输入法开发的人懵圈了。
简单粗暴的方法:反编译,分析 AndroidManifast.xml 文件。
Apk反编译,AndroidManifast 文件一般都能完整的拿到,这个时候,只需要找 Service 节点即可。
当然,实际搜Service可能会出来好多结果,一般这个 Service 会有如下几个特点:
1、会申请 android.permission.BIND_INPUT_METHOD 权限;
2、会有个Action:android.view.InputMethod;
3、会有meta-data,里面会指定name:android.view.im,以及一个 resource。
以触宝输入法为例:
<service android:name="com.cootek.smartinput5.TouchPalIME"android:permission="android.permission.BIND_INPUT_METHOD"><intent-filter><action android:name="android.view.InputMethod"/><category android:name="android.intent.category.DEFAULT"/></intent-filter><meta-data android:name="android.view.im"android:resource="@xml/touchpal_method"/></service>
找到这个 Service 之后,接下来就是进行默认操作了。
以触宝输入法为例
默认勾选:Settings.Secure.ENABLED_INPUT_METHODS
在 frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java 文件加入如下代码:
loadSetting(stmt,Settings.Secure.ENABLED_INPUT_METHODS,"com.cootek.smartinputv5/com.cootek.smartinput5.TouchPalIME");
默认使用:Settings.Secure.DEFAULT_INPUT_METHOD
在 frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java 文件加入如下代码:
loadSetting(stmt,Settings.Secure.DEFAULT_INPUT_METHOD,"com.cootek.smartinputv5/com.cootek.smartinput5.TouchPalIME");
