Android修改默认输入法为搜狗方法如下:

1、修改frameworks/base/packages/SettingsProvider/res/values/defaults.xml 添加一行:

   com.sohu.inputmethod.sogouoem/.SogouIME

       注释:com.sohu.inputmethod.sogouoem/.SogouIME 为搜狗输入法ID,若想修改为其它输入法只需要修改这个ID即可。                                           

2、修改frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java

       在 private void loadSecureSettings(SQLiteDatabase db) {} 方法中添加一行

    loadStringSetting( stmt, Settings.Secure.DEFAULT_INPUT_METHOD,   R.string.config_default_input_method );
    private void loadSecureSettings(SQLiteDatabase db) {        SQLiteStatement stmt = null;        try {            stmt = db.compileStatement("INSERT OR IGNORE INTO secure(name,value)"                    + " VALUES(?,?);");            loadBooleanSetting(stmt, Settings.Secure.ETHERNET_ON,R.bool.def_ethernet_on);            loadStringSetting(stmt, Settings.Secure.LOCATION_PROVIDERS_ALLOWED,                    R.string.def_location_providers_allowed);            // 添加搜狗输入法开始            loadStringSetting( stmt, Settings.Secure.DEFAULT_INPUT_METHOD,                    R.string.config_default_input_method );            // 添加搜狗输入法结束            String wifiWatchList = SystemProperties.get("ro.com.android.wifi-watchlist");            if (!TextUtils.isEmpty(wifiWatchList)) {                loadSetting(stmt, Settings.Secure.WIFI_WATCHDOG_WATCH_LIST, wifiWatchList);            }            // Don't do this.  The SystemServer will initialize ADB_ENABLED from a            // persistent system property instead.            //loadSetting(stmt, Settings.Secure.ADB_ENABLED, 0);            // Allow mock locations default, based on build            loadSetting(stmt, Settings.Secure.ALLOW_MOCK_LOCATION,                    "1".equals(SystemProperties.get("ro.allow.mock.location")) ? 1 : 0);            loadSecure35Settings(stmt);            loadBooleanSetting(stmt, Settings.Secure.MOUNT_PLAY_NOTIFICATION_SND,                    R.bool.def_mount_play_notification_snd);            loadBooleanSetting(stmt, Settings.Secure.MOUNT_UMS_AUTOSTART,                    R.bool.def_mount_ums_autostart);            loadBooleanSetting(stmt, Settings.Secure.MOUNT_UMS_PROMPT,                    R.bool.def_mount_ums_prompt);            loadBooleanSetting(stmt, Settings.Secure.MOUNT_UMS_NOTIFY_ENABLED,                    R.bool.def_mount_ums_notify_enabled);            loadBooleanSetting(stmt, Settings.Secure.ACCESSIBILITY_SCRIPT_INJECTION,                    R.bool.def_accessibility_script_injection);            loadStringSetting(stmt, Settings.Secure.ACCESSIBILITY_WEB_CONTENT_KEY_BINDINGS,                    R.string.def_accessibility_web_content_key_bindings);            loadIntegerSetting(stmt, Settings.Secure.LONG_PRESS_TIMEOUT,                    R.integer.def_long_press_timeout_millis);            loadBooleanSetting(stmt, Settings.Secure.TOUCH_EXPLORATION_ENABLED,                    R.bool.def_touch_exploration_enabled);            loadBooleanSetting(stmt, Settings.Secure.ACCESSIBILITY_SPEAK_PASSWORD,                    R.bool.def_accessibility_speak_password);            loadStringSetting(stmt, Settings.Secure.ACCESSIBILITY_SCREEN_READER_URL,                    R.string.def_accessibility_screen_reader_url);            if (SystemProperties.getBoolean("ro.lockscreen.disable.default", false) == true) {                loadSetting(stmt, Settings.System.LOCKSCREEN_DISABLED, "1");            } else {                loadBooleanSetting(stmt, Settings.System.LOCKSCREEN_DISABLED,                        R.bool.def_lockscreen_disabled);            }            loadBooleanSetting(stmt, Settings.Secure.SCREENSAVER_ENABLED,                    com.android.internal.R.bool.config_dreamsEnabledByDefault);            loadBooleanSetting(stmt, Settings.Secure.SCREENSAVER_ACTIVATE_ON_DOCK,                    com.android.internal.R.bool.config_dreamsActivatedOnDockByDefault);            loadBooleanSetting(stmt, Settings.Secure.SCREENSAVER_ACTIVATE_ON_SLEEP,                    com.android.internal.R.bool.config_dreamsActivatedOnSleepByDefault);            loadStringSetting(stmt, Settings.Secure.SCREENSAVER_COMPONENTS,                    com.android.internal.R.string.config_dreamsDefaultComponent);            loadStringSetting(stmt, Settings.Secure.SCREENSAVER_DEFAULT_COMPONENT,                    com.android.internal.R.string.config_dreamsDefaultComponent);            loadBooleanSetting(stmt, Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED,                    R.bool.def_accessibility_display_magnification_enabled);            loadFractionSetting(stmt, Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_SCALE,                    R.fraction.def_accessibility_display_magnification_scale, 1);            loadBooleanSetting(stmt,                    Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_AUTO_UPDATE,                    R.bool.def_accessibility_display_magnification_auto_update);            loadBooleanSetting(stmt, Settings.Secure.USER_SETUP_COMPLETE,                    R.bool.def_user_setup_complete);        } finally {            if (stmt != null) stmt.close();        }    }

3、 修改完毕重新编译固件验证修改结果。


调试方法:

          默认输入法调试可以在frameworks/base/services/java/com/android/server/InputMethodManagerService.java文件中打Log跟踪调用步骤,

  void buildInputMethodListLocked(ArrayList list,            HashMap map) {        if (DEBUG) {            Slog.d(TAG, "--- re-buildInputMethodList " + ", \n ------ \n" + getStackTrace());        }        list.clear();        map.clear();        // Use for queryIntentServicesAsUser        final PackageManager pm = mContext.getPackageManager();        final Configuration config = mRes.getConfiguration();        final boolean haveHardKeyboard = config.keyboard == Configuration.KEYBOARD_QWERTY;        String disabledSysImes = mSettings.getDisabledSystemInputMethods();        if (disabledSysImes == null) disabledSysImes = "";        final List services = pm.queryIntentServicesAsUser(                new Intent(InputMethod.SERVICE_INTERFACE),                PackageManager.GET_META_DATA, mSettings.getCurrentUserId());        final HashMap> additionalSubtypes =                mFileManager.getAllAdditionalInputMethodSubtypes();        for (int i = 0; i < services.size(); ++i) {            ResolveInfo ri = services.get(i);            ServiceInfo si = ri.serviceInfo;            // 遍历出系统所有的输入法            Log.i("TAG" , "si.packageName =" + si.packageName);            Log.i("TAG" , "si.name =" + si.name);            ComponentName compName = new ComponentName(si.packageName, si.name);            if (!android.Manifest.permission.BIND_INPUT_METHOD.equals(                    si.permission)) {                Slog.w(TAG, "Skipping input method " + compName                        + ": it does not require the permission "                        + android.Manifest.permission.BIND_INPUT_METHOD);                continue;            }            if (DEBUG) Slog.d(TAG, "Checking " + compName);            try {                InputMethodInfo p = new InputMethodInfo(mContext, ri, additionalSubtypes);                list.add(p);                final String id = p.getId();                Log.i("jintuo", "Id = " + id);                map.put(id, p);                // Valid system default IMEs and IMEs that have English subtypes are enabled                // by default                if ((isValidSystemDefaultIme(p, mContext) || isSystemImeThatHasEnglishSubtype(p))) {                    setInputMethodEnabledLocked(id, true);                }                if (DEBUG) {                    Slog.d(TAG, "Found a third-party input method " + p);                }            } catch (XmlPullParserException e) {                Slog.w(TAG, "Unable to load input method " + compName, e);            } catch (IOException e) {                Slog.w(TAG, "Unable to load input method " + compName, e);            }        }        final String defaultImiId = mSettings.getSelectedInputMethod();        // defaultImiId  默认输入法ID        Log.i("TAG", "defaultImiId = " + defaultImiId);        if (!TextUtils.isEmpty(defaultImiId)) {            if (!map.containsKey(defaultImiId)) {                Slog.w(TAG, "Default IME is uninstalled. Choose new default IME.");                if (chooseNewDefaultIMELocked()) {                    updateFromSettingsLocked();                }            } else {                // Double check that the default IME is certainly enabled.                setInputMethodEnabledLocked(defaultImiId, true);            }        }   }

    

更多相关文章

  1. Android退出程序的多种方法
  2. Android数据共享 sharedPreferences 的使用方法
  3. Android Studio使用过程中遇到的问题(一)-- "value 2"异常解决方法
  4. 简单总结RectF、Rect 和Matrix ,还有Paint的使用方法
  5. 关于用Android的API重写drawRegion方法的代码
  6. Android实现退出时关闭所有Activity的方法

随机推荐

  1. Android系统使用感受——记录我的三星GT-
  2. Android(安卓)手机登陆Exchange 2013邮箱帐
  3. APP安全谁之过?爱加密为APP开发者分忧
  4. Android活动生命周期
  5. Android中实现定时器的五种方式
  6. android https 双向认证--高级
  7. Android(安卓)Studio(7)---从模板添加代
  8. 大佬们,一波RxJava 3.0来袭,请做好准备~
  9. Fresco: android上的图像处理库
  10. Android(安卓)Activity全面解析