原文出处:http://www.ccbu.cc/framework/modify-default-inputmethod.html

1. 修改系统默认输入法

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

  1. 在frameworks/base/packages/SettingsProvider/res/values/defaults.xml添加
<string name="def_input_method" translatable="false">com.android.inputmethod.pinyin/.PinyinIME</string>
  1. frameworks/base/packages/SettingsProvider/src/com/Android/providers/settings/DatabaseHelper.java的loadSecureSettings函数中添加
loadStringSetting(stmt, Settings.Secure.DEFAULT_INPUT_METHOD, R.string.def_input_method);
  1. 如使用第三方自定义输入法,请将输入法放到system/app目录打包到系统。

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

输入法 包名/类名
百度 com.baidu.input/.ImeService
讯飞 com.iflytek.inputmethod/.FlyIME
腾讯 com.tencent.qqpinyin/.QQPYInputMethodService
谷歌 com.google.android.inputmethod.pinyin/.PinyinIME
搜狗 com.sohu.inputmethod.sogou/.SogouIME
触宝 com.cootek.smartinput5/.TouchPalIME

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

  1. 显示系统安装的输入法列表
    adb shell ime list -s

  2. 获取系统默认输入法
    adb shell settings get secure default_input_method

  3. 设置系统默认输入法
    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的处理。

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

    <string name="def_enabled_input_methods" translatable="false">com.android.inputmethod.pinyin/.PinyinIME</string>
    
  2. 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的值会包含多个输入法,以:分割。

Android 修改系统默认输入法相关推荐

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

    系统默认输入法改为拼音输入法 1.在defaults.xml添加两个string +++ b/release/frameworks/base/packages/SettingsProvider/res ...

  2. Android修改系统默认设置

     1.launcher的布局太居中,要想两边拉伸 <\packages\apps\Launcher2\res\values\dimens.xml> <dimen name=&qu ...

  3. android修改系统density,Android应用开发Android 修改系统默认density

    本文将带你了解Android应用开发Android 修改系统默认density,希望本文对大家学Android有所帮助. 如你所知在Anroid N 中,系统添加了多个级别的密度值供用户选择. 系统的 ...

  4. [Android系统]android7.1 修改系统默认输入法

    参看博客: Android 7.0 删除原生输入法(AOSP)&更换系统默认输入法_Photon128的博客-CSDN博客_aosp输入法 [RK3288][Android6.0] 调试笔记 ...

  5. rk3399 9.0修改系统默认输入法

    在rk3399 9.0中设置搜狗输入法为系统默认输入法 framework/base/core/java/com/android/internal/inputmethod/InputMethodUti ...

  6. Android替换/修改系统默认输入法

    各大输入法的服务 ro.mtk_default_ime=com.tencent.qqpinyin.QQPYInputMethodService//默认qq输入法 ro.mtk_default_ime= ...

  7. Android替换系统默认输入法

    由于产品需求,需将Android原生输入法先后替换成搜狗输入法.百度输入法.谷歌拼音输入法,本文以替换为谷歌输入法为例. packages/apps下新建文件夹,将需替换的第三方输入法apk放入该文件 ...

  8. android修改系统默认时间

    本文是基于Android5.1的代码 1.如何修改出厂默认日期和默认时区 一.修改默认时间 1.修改RTC默认日期 : Android L之前: \alps\mediatek\custom\[proj ...

  9. android 6.0 默认输入法,Android中系统默认输入法设置的方法(输入法的显示和隐藏)...

    1.调用显示系统默认的输入法 方法一. inputmethodmanager imm = (inputmethodmanager) getsystemservice(context.input_met ...

最新文章

  1. python语言是什么时候诞生的_python诞生于什么时候
  2. 【408预推免复习】计算机网络(谢希仁第七版)第一章——概述
  3. C# WinForm DataGridView单击选中一整行,只能单选
  4. 谈谈被大家过于在乎的性能
  5. 今天俺要说一说工厂方法模式(Factory)
  6. Linux service指令
  7. android 蒙版图片带拖动_黑橙修图:新手入门篇2-一句话带你认识图层蒙版
  8. 利用Pin实现CodeCoverage
  9. Spark源码阅读——DirectInputDStream
  10. sql还原数据库备份数据库_有关数据库备份,还原和恢复SQL面试问题–第IV部分
  11. Nginx——安装与虚拟主机配置(域名非80端口问题)
  12. Java SE 正则表达式 API Pattern 与 Matcher.
  13. 计算机的excel的知识,计算机基础知识:Excel常用操作(一)
  14. 关于vue的@click传递
  15. i58250u是低端处理器吗_玩都市天际线要很大的显卡吗
  16. NLP | 自然语言处理经典seq2seq网络BERT详解及代码
  17. 服务器物理安装,安装Nano Server物理服务器Hyper-V角色
  18. Archlinux安装MacBook无线网卡驱动 (Broadcom 4360)
  19. 一个程序员的学习历程
  20. 后浪青年的聊天,需要Python助威!

热门文章

  1. 诱惑视频木马样本态势
  2. Java实习生常规技术面试题每日十题Java基础(三)
  3. 今日头条赚钱是真的吗,今日头条赚钱规则是什么
  4. 从大数据应用案例中理解大数据的应用价值
  5. 启辰r30近光灯远光灯保险盒,近光灯故障处理
  6. 如何在jupyter notebook 中修改主题、字体、字号等
  7. 关于在针对esp32进行编程时出现dl_lib.h: No such file or directory的解决办法
  8. 广州大学 数据结构实验报告
  9. 恐龙拼图游戏 - 恐龙世界积木拼图游戏
  10. 23种设计模式(15):备忘录模式