1> 每一个输入法应用的源文件中都有个method.xml文件,在该文件中设置是否是第一次开机的时候系统默认输入法
如android系统默认的谷歌拼音输入法
packages/inputmethods/PinyinIME/res/xml/method.xml中
android:isDefault="@bool/im_is_default"
2> 所有输入法应用中也必须包含如下service
android:label="@string/english_ime_name"
android:permission="android.permission.BIND_INPUT_METHOD">
android.view.InputMethod" />//
系统主要是通过该intent来搜集所有输入法应用信息
3> 开机的时候InputMethodManagerService中会对于默认输入法进行处理
public InputMethodManagerService(Context context) {
if (TextUtils.isEmpty(Settings.Secure.getString(
mContext.getContentResolver(), Settings.Secure.DEFAULT_INPUT_METHOD))) {
InputMethodInfo defIm = null;
for (InputMethodInfo imi: mMethodList) {
if (defIm == null && imi.getIsDefaultResourceId() != 0) { //此处开机的时候判断是否是默认输入法
try {
Resources res = context.createPackageContext(
imi.getPackageName(), 0).getResources();
if (res.getBoolean(imi.getIsDefaultResourceId())) {
defIm = imi;
Slog.i(TAG, "Selected default: " + imi.getId());
}
} catch (PackageManager.NameNotFoundException ex) {
} catch (Resources.NotFoundException ex) {
}
}
}
开机后setting provider 中会对系统中已经安装的输入法应用进行参数搜集和配置,在inputmenthodservice的构造寒水函数中,会去查询所有Interfilter 为
android.view.InputMethod" /> 并保存在数组列表中,如果有package包更新,也会更新InputMethodInfo列表
阅读(2824) | 评论(0) | 转发(0) |