默认输入法修改: 1. android\ framework \base\packages\SettingsProvider\res\values\defaults .xml 增加 <string name=" def_input_method ">包名/类名</string> 字段,其目的是定义一个字符串常量用以记录默认输入法的ID[具体由包名和类名组合而成],例如com.android.inputmethod.pinyin/.PinyinIME [若是编译镜像需求则该字段还需在overlay中添加] 2. android\framework \base\packages\SettingsProvider\src\com\android\providers\settings\DatabaseHelper. java private void loadSecureSettings (SQLiteDatabase db)方法中增加 loadStringSetting(stmt, Settings.Secure.DEFAULT_INPUT_METHOD, R.string.def_input_method); loadStringSetting(stmt, Settings.Secure.ENABLED_INPUT METHODS,R.string.def_input_method); 其目的是将默认输入法的信息写入到系统配置数据库中
1.2步骤完成后重新编译SettingsProvider.apk即可完成默认输入法修改,不过切换系统语言后可能会变回系统默认的。因为InputMethodManagerService有个广播接收器当语言发生变化后会重新reset一下因此有了第三步 3. android\framework\base\services\core\ java\com\android\server\InputMethodManagerService .java public InputMethodManagerService (Context context)方法中屏蔽广播接收器中的语言切换恢复键盘操作 具体地方: final IntentFilter filter = new IntentFilter(); filter.addAction(Intent.ACTION_LOCALE_CHANG); mContext.registerReceiver( new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { synchronized (mMethodMap) //resetStatelfCurrentLocaleChangedLocked (); //屏蔽广播接收器中的语言切换恢复键盘揉作 ),filter); 当然可以修改相关方法内部逻辑使其reset时还是以项目需求的输入法为reset的输入法。具体不再说明,有兴趣的可以自己去跟踪相关方法代码。 |
Andoid7.1系统 Framework中默认输入法修改笔录
最新推荐文章于 2023-11-16 17:00:19 发布