Android4.2自带有输入法,有很多客户都要求内置指定的输入法。
要想添加输入法,并指定成默认输入法,修改方法和Android4.0不一样了。
Android 4.2 中虽然定义了Settings.Secure.DEFAULT_INPUT_METHOD,但没有地方赋值。
在InputMethodManagerService.java (frameworks\base\services\java\com\android\server) 文件中InputMethodManagerService函数中,可以发现,如果没有默认输入法,就会执行
final String defaultImiId = mSettings.getSelectedInputMethod();
mImeSelectedOnBoot = !TextUtils.isEmpty(defaultImiId);
buildInputMethodListLocked(mMethodList, mMethodMap);
mSettings.enableAllIMEsIfThereIsNoEnabledIME();
if (!mImeSelectedOnBoot) {
Slog.w(TAG, "No IME selected. Choose the most applicable IME.");
resetDefaultImeLocked(context);//
}
--------------->getMostApplicableDefaultIMELocked()
在system/app/目录下找激活的输入法
loadStringSetting(stmt, Settings.Secure.DEFAULT_INPUT_METHOD ,
R.string.def_input_methods);
\frameworks\base\packages\SettingsProvider\res\values\defaults.xml中添加
<string name="def_input_methods" translatable="false">com.sohu.inputmethod.sogou/.SogouIME</string>
其中com.sohu.inputmethod.sogou/.SogouIME
是输入法的apk的service全名(package="com.sohu.inputmethod.sogou" ,service android:name=".SogouIME")这些可以反编译apk中的AndroidManifest.xml 得到。
如果不是添加输入法,只是修改def_input_methods" translatable的值就可是指定默认输入法。