Andoid7.1系统 Framework中默认输入法修改笔录

默认输入法修改:

1.  android\ framework \base\packages\SettingsProvider\res\values\defaults .xml

增加

name=" def_input_method ">包名/类名

字段其目的是定义一个字符串常量用以记录默认输入法的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中默认输入法修改笔录)