做了一年多的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"
);
网友评论