600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > Android 修改系统默认输入法

Android 修改系统默认输入法

时间:2023-08-03 20:44:45

相关推荐

Android 修改系统默认输入法

原文出处:/framework/modify-default-inputmethod.html

1. 修改系统默认输入法

Android系统的默认输入法在很多情况下是无法满足我们的需求的,因此就需要OEM自己集成输入法,基础输入法到系统,并需要修改系统默认输入法的配置。

在frameworks/base/packages/SettingsProvider/res/values/defaults.xml添加

<string name="def_input_method" translatable="false">com.android.inputmethod.pinyin/.PinyinIME</string>

frameworks/base/packages/SettingsProvider/src/com/Android/providers/settings/DatabaseHelper.java的loadSecureSettings函数中添加

loadStringSetting(stmt, Settings.Secure.DEFAULT_INPUT_METHOD, R.string.def_input_method);

如使用第三方自定义输入法,请将输入法放到system/app目录打包到系统。

附:常见输入法的包名和类名

2. 使用ADB命令设置默认输入法

显示系统安装的输入法列表

adb shell ime list -s

获取系统默认输入法

adb shell settings get secure default_input_method

设置系统默认输入法

adb shell settings put secure default_input_method com.sohu.inputmethod.sogou/.SogouIME

3. 使用代码设置系统默认输入法

public class InputMethodUtil {/*** get system default input method* @param context* @return*/public static String getDefaultInputMethod(Context context) {return Settings.Secure.getString(context.getContentResolver(), Settings.Secure.DEFAULT_INPUT_METHOD);}/*** Set system default input method* @param context* @param inputMethod: input method* @return*/public static boolean setDefaultInputMethod(Context context, String inputMethod) {return Settings.Secure.putString(context.getContentResolver(), Settings.Secure.DEFAULT_INPUT_METHOD, inputMethod);}/*** Gets the input method that the system has installed* * @param context* @return installed input method list*/public static String[] getInputMethodIdList(Context context) {InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);if (imm != null && imm.getInputMethodList() != null) {String[] methodIds = new String[imm.getInputMethodList().size()];for (int i = 0; i < imm.getInputMethodList().size(); i++) {methodIds[i] = imm.getInputMethodList().get(i).getId();}return methodIds;}return new String[] {};}/*** update system input method with checking* @param context* @param inputMethod* @return*/public static boolean updateDefaultInputMethod(Context context, String inputMethod) {if (context != null && !TextUtils.isEmpty(inputMethod)) {String current = getDefaultInputMethod(context);if (current != null && !current.equalsIgnoreCase(inputMethod)) {String packageName = inputMethod.substring(0, inputMethod.indexOf('/'));android.content.pm.ApplicationInfo info = null;try {info = context.getPackageManager().getApplicationInfo(packageName, 0);} catch (NameNotFoundException e) {e.printStackTrace();}if (info != null) {return setDefaultInputMethod(context, inputMethod);}}}return false;}}

4. Android 9.0修改默认输入法

上的修改方式在Android4.4上验证是没有问题的,在Android9.0版本上,还需要增加ENABLED_INPUT_METHODS的处理。

在frameworks/base/packages/SettingsProvider/res/values/defaults.xml添加:

<string name="def_enabled_input_methods" translatable="false">com.android.inputmethod.pinyin/.PinyinIME</string>

frameworks/base/packages/SettingsProvider/src/com/Android/providers/settings/DatabaseHelper.java的loadSecureSettings函数中添加

loadStringSetting(stmt, Settings.Secure.ENABLED_INPUT_METHODS,R.string.def_enabled_input_methods);

使用代码设置时,还需要设置Settings.Secure.DEFAULT_INPUT_METHOD的值,Settings.Secure.DEFAULT_INPUT_METHOD的值会包含多个输入法,以:分割。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。