Android默认输入法的配置和两个关键词相关,都保存在SettingsProvider或者settings_secure.xml里面。一个是enabled_input_methods,表示配置的系统允许使用的输入法的id字符串,中间以冒号分隔,比如com.android.inputmethod.latin/.LatinIME:com.xxxx.inputmethod.remote/.RemoteIME,另外一个是default_input_method,表示配置的系统默认使用的输入法。

        /*** List of input methods that are currently enabled.  This is a string* containing the IDs of all enabled input methods, each ID separated* by ':'.*/public static final String ENABLED_INPUT_METHODS = "enabled_input_methods";
        /*** Setting to record the input method used by default, holding the ID* of the desired method.*/public static final String DEFAULT_INPUT_METHOD = "default_input_method";

在InputMethodService启动时,一方面会从packagemanager那边获取InputMethodService的应用信息,另一方面也会settings数据库里面读取enabled_input_methods对应的输入法信息。如果后者是空的,则会把前者保存起来并enable,并通过InputMethodUtils.getMostApplicableDefaultIME方法来获取最适合当前系统的输入法,并设置为默认的输入法。如果后者不是空的,则会读取settings数据库的default_input_method信息,如果是有效的输入法就会把它设置为默认的输入法,如果不是有效的是空的则还是会通过getMostApplicableDefaultIME方法来获取最适合当前系统的输入法。

逻辑理清楚了,那么通过settings配置设置系统默认的输入法也就明确了,只要两步。

1.在SettingsProvider下defaults.xml添加enabled_input_methods和default_input_method的配置项。

    <string name="def_input_method" translatable="false">com.xxxx.inputmethod.remote/.RemoteIME</string><string name="enabled_input_methods" translatable="false">com.android.inputmethod.latin/.LatinIME:com.xxxx.inputmethod.remote/.RemoteIME</string>

2.在SettingsProvider内的DatabaseHelper类里面loadSecureSettings里面添加上面两个值的读取。

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

顺便说下,虽然SettingsProvider从N版本开始就重构了,数据库里面的值都保存在data/users/userid/xxx_settings.xml里面,但是SettingsProvider在初始化时仍然会从之前创建的数据库里面把这些数据迁移出来,所以在defaults里面或者overlay对应的defaults文件下面配置的键值对都是始终有效的。

Android 默认输入法配置问题相关推荐

  1. android代码打开语言和输入法设置,Android默认输入法勾选多国语言,并默许其中一种语言...

    Android默认输入法勾选多国语言,并默认其中一种语言 1.首先在设备上调整输入法 设置>语言输入法>Android键盘(AOSP),在输入语言里勾选要选择的语言,比如选"英语 ...

  2. android 默认输入法,踩坑之Android默认输入法配置

    前言 在实际项目开发过程中,需要集成客户的输入法,但Android原生并不支持输入法的配置.在这里记录下实际操作. 支持默认输入法配置 Android原生并不支持默认输入法的设置,默认就是谷歌原生的输 ...

  3. android默认输入法设置

    设置默认输入法 在 frameworks\base\core\res\res\values\config.xml 添加一个属性: <!--leo add--> <string nam ...

  4. 修改其他输入法为android 默认输入法

    有些输入法预制到系统中时默认情况下是不能直接使用的,要在设置->语言和键盘中勾选相应输入法,这里提供了一种参考改进,使预制输入法直接可用. 共有两处修改,第一处:       在android2 ...

  5. Android TV 源码修改默认输入法

    前一阵子,应泰国客户需求,需要在Android TV系统定制一个多语言输入法,至少支持中.英.泰三种语言.拿到这个任务,对于至今还是小白的我来说,当然先去google一下有没有大神专门做过符合要求的输 ...

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

    Android的所有系统设置项(如音量.触摸提示音.默认输入法等信息)均是保存到一个数据库.在界面上调整设置时将值保存到该数据库,开机时将从数据库读取值作为默认设置.这些读取.设置操作都可以通过API ...

  7. android mtk平台,android mtk平台默认输入法

    [Description] 如何修改默认输入法? [Solution] 一.适用于ICS(Android V4.0)之前的版本: 1. 安装需要用的默认输入法(.apk)到system/app 2. ...

  8. android 11.0 12.0第三方输入法app设置系统默认输入法

    1.概述 在11.0 12.0的产品开发中,有功能需要要求设置默认输入法,替换掉系统的输入法,所以这就需要了解设置 输入法的相关功能需求,然后根据输入法包名来设置默认输入法 2.第三方输入法app设置 ...

  9. Android 修改系统默认输入法

    原文出处:http://www.ccbu.cc/framework/modify-default-inputmethod.html 1. 修改系统默认输入法 Android系统的默认输入法在很多情况下 ...

最新文章

  1. 并发编程-21J.U.C组件拓展之Future和FutureTask
  2. Math.Round默认采用的不是四舍五入法, 而是四舍六入的银行家算法, 如何找回四舍五入法?...
  3. Frequent values【线段树】
  4. Java成员方法的声明和调用
  5. git-文本内容的回退-缓冲区退到工作区-工作区改动后改为改动前
  6. Gibbs Sampling\吉布斯采样(三)
  7. Datalogic得利捷发布IMPACT 2D机器人引导URCap插件
  8. 大学生高等数学竞赛复习资料
  9. Junit 4 的 @Before 和 @BeforeClass 对比 Junit 5 @BeforeEach 和 @BeforeAll
  10. ams1117 lm317 对比_最受电子工程师欢迎的10款经典稳压电源器件,电路当中经常用到...
  11. 搭建属于自己的影视网站
  12. vs下qt混合编译错误:MOC问题
  13. 低版本MacOS安装Nginx
  14. 最大传输单元MTU详解
  15. linux与windows双系统windows无法连网问题的解决
  16. 状语从句不是简单句_英语简单句、从句分类及解析
  17. php教程燕十八_2PHP 3小时光速入门视频教程【燕十八】
  18. node.js毕业设计安卓移动LYQ电子商城APP(程序+APP+LW)
  19. IPTABLES知识
  20. eSPI自学笔记(三):Run-time Flash Access Channel

热门文章

  1. 第一次将学习的知识实际应用于现实情况
  2. java 分享到qq空间_Android中集成QQ登陆和QQ好友分享及QQ空间分享
  3. python进行聚类分析:鸢尾花(iris)代码
  4. delphi mysql 乱码_Delphi连接mysql中文乱码的解决办法
  5. mysql pt online_[MySQL] 材料表结构转移的好助手 pt-online-schema-change
  6. eclipse安装插件:XXX cannot be resolved解决方案
  7. Flutter-选取图库图片和拍照功能,选取视频和拍摄视频
  8. U盘和硬盘实际容量与标称容量
  9. NYOJ 1575 我想满手鲜血
  10. android 变量定义数组,android 创建数组