通过FOTA 升级修改默认输入法的实现

需求背景:

由于公司出于商业的要求,需要输入法进行切换,但是输入法是已经配置好的,并且已经写入了用户数据库中,但是通过FOTA 又无法更改客户的数据,于是想到了如下方法:

配置文件修改:

base/packages/SettingsProvider/res/values/defaults.xml
修改默认输入法的配置:

<string name="config_default_input_method" translatable="false">com.sohu.inputmethod.sogou/.SogouIME</string>
<string name="config_enabled_input_method" translatable="false">com.sohu.inputmethod.sogou/.SogouIME:com.android.inputmethod.latin/.LatinIME</string>

代码修改如下:

base/services/core/java/com/android/server/InputMethodManagerService.java

   private void switchUserLocked(int newUserId) { 
   添加如下代码:
          final String defaultImiId = mSettings.getSelectedInputMethod();
        if (!TextUtils.isEmpty(defaultImiId)) {
            if (!map.containsKey(defaultImiId)) {
                Slog.w(TAG, "Default IME is uninstalled. Choose new default IME.");
		     **/* modify begin */**
            /* reset default ime if previous default ime uninstalled */
            try {
                final String pkgProvider = "com.android.providers.settings";
                Resources res = mContext.createPackageContext(pkgProvider, 0).getResources();
                int resImeId = res.getIdentifier("def_input_method", "string", pkgProvider);
                String defImeId = res.getString(resImeId);
                mSettings.putSelectedInputMethod(defImeId);
                setInputMethodEnabledLocked(defImeId, true);
                Slog.w(TAG, "Reset default IME to: " + defImeId);
            } catch (Exception e) {
                Slog.w(TAG, "Failed to reset default ime", e);
                if (chooseNewDefaultIMELocked()) {
                    updateInputMethodsFromSettingsLocked(true);
                }
            }
            **/* modify end */**
            } else {
                // Double check that the default IME is certainly enabled.
                setInputMethodEnabledLocked(defaultImiId, true);
            }
        }

猜你喜欢

转载自blog.csdn.net/houxian1103/article/details/84856837