RK3367 Android 7.1 输入法整理

1,835 阅读2分钟

输入法(7.1)

Android默认输入法语言的修改以及SettingsProvider作用

Android系统是通过 Settings.Secure.DEFAULT_INPUT_METHOD 和 Settings.Secure.ENABLED_INPUT_METHODS 这两个settings这两个系统数据库字段来获取和设置输入法的。其中DEFAULT_INPUT_METHOD表示系统当前默认的输入法,而ENABLED_INPUT_METHODS表示系统中激活使用的输入法(可以有多个)。 两个字段的具体字符定义在 frameworks/base/core/java/android/provider/Settings.java文件中:

public static final String DEFAULT_INPUT_METHOD = "default_input_method";
public static final String ENABLED_INPUT_METHODS = "enabled_input_methods";
InputMethodManager mImm = (InputMethodManager) App.getInstance().getSystemService(Context.INPUT_METHOD_SERVICE);
// 获取系统加载的所有输入法包括未激活的
List<InputMethodInfo> methodList = mImm.getInputMethodList();
// 弹出输入法选择框(用于非系统APP,且该输入法已经激活才会显示)
mImm.showInputMethodPicker()

// 如果需要激活输入法需要引导用户手动激活
Intent intent = new Intent(Settings.ACTION_INPUT_METHOD_SETTINGS);
startActivity(intent);

系统应用直接修改底层数据库实现输入法的切换

Settings.Secure.putString(getActivity().getContentResolver(), Settings.Secure.ENABLED_INPUT_METHODS, inputMethodInfo.getId());
Settings.Secure.putString(getActivity().getContentResolver(), Settings.Secure.DEFAULT_INPUT_METHOD, inputMethodInfo.getId());

系统默认输入法配置

  1. 在对应机型的custmer.mk文件中配置默认输入法的系统属性ro.config.default.inputmethod ,原生的英文输入法是:com.android.inputmethod.latin/.LatinIME

  2. 在frameworks\base\packages\SettingsProvider\src\com\android\providers\settings\DatabaseHelper.java 增加如下代码

loadSetting(stmt, Settings.Secure.DEFAULT_INPUT_METHOD,
SystemProperties.get("ro.config.default.inputmethod", "com.android.inputmethod.latin/.LatinIE"));

loadSetting(stmt, Settings.Secure.ENABLED_INPUT_METHODS,
SystemProperties.get("ro.config.default.inputmethod",
"com.android.inputmethod.latin/.LatinIME"));

除了设置DEFAULT_INPUT_METHOD以外还要设置ENABLED_INPUT_METHODS

frameworks/base/packages/SettingsProvider的作用

我们在调用android.provider.Settings修改一些设置时,Settings会调用真正的SettingsProvider去访问数据库。 android把SettingsProvider的代码放在了frameworks/base/packages下面。

Android framework系统默认设置修改

修改Settings源码可修改系统设置项,Settings数据被存放于com.android.providers.settings/databases/settings.db 中,如果想修改系统启动后加载的默认值,一种方法是直接修改settings.db的值,另一种就是修改SettingsProvider默认值 Settings应用能够配置Android系统的各种设置,这些设置的默认值都是由frameworks中的SettingsProvider从数据库中读取的, 那么第一次开机的时候这些数据都是从哪儿来的呢?

frameworks/base/packages/SettingsProvider/res/values/defaults.xml这个文件就是用来存储Android系统的默认设置 如果想定义defaults.xml中没有的,在这里添加后,需修改frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java,加入自己的存储代码。

参考

www.jianshu.com/p/8478ce19d…

安卓输入法开发之引导用户打开和切换到自己的输入法

blog.csdn.net/luzhenrong4…

Android源码配置默认输入法

blog.csdn.net/wkw1125/art…

Android.Settings类&设置默认输入法

www.cnblogs.com/lijunamneg/…