应项目(Android 4.3)需求需要修改默认输入法,本来想的是,这个应该很简单的撒。随google之~,发现网上主要罗列出以下这种方法:在 frameworks\base\core\res

因项目(Android 4.3)需求需要修改默认输入法,本来想的是,这个应该很简单的撒。随google之~,发现网上主要罗列出以下这种方法:

在 frameworks\base\core\res\res\values\config.xml 添加一个属性:

com.android.inputmethod.pinyin/.PinyinIME

在frameworks\base\services\java\com\android\server\InputMethodManagerService.java

的方法buildInputMethodListLocked()里添加:

String defaultIme = Settings.Secure.getString(mContext

.getContentResolver(), Settings.Secure.DEFAULT_INPUT_METHOD);

if ( defaultIme == null )

{

final Resources res = mContext.getResources();

try

{

//frameworks\base\core\res\res\values\config.xml

String myIME = res.getString( com.android.internal.R.string.config_default_input_method );

if ( myIME != null && myIME.length() > 0 )

{

Settings.Secure.putString( mContext.getContentResolver(),

Settings.Secure.DEFAULT_INPUT_METHOD,

myIME );

}

}

catch ( Exception e )

{

}

}

但是在自己的源码中修改后,刷机调试发现木有作用,而且这种直接修改源代码是不是不好呢?

后来发现这是4.2的源码,是不是4.3的不一样呢。好吧,木有办法 从源码开始分析吧!(前辈指导,google没有,就看源码)

通过log跟踪,发现系统第一次初始化的时候会调用以下的函数,并且以后的开机中该函数不会在被调用,而下面的函数功能是重置可用的输入法选现(在frameworks/base/core/java/com/android/internal/inputmethod/InputMethodUtils.java 中)

private void resetDefaultImeLocked(Context context) {

// Do not reset the default (current) IME when it is a 3rd-party IME

if (mCurMethodId != null

&& !InputMethodUtils.isSystemIme(mMethodMap.get(mCurMethodId))) {

return;

}

InputMethodInfo defIm = null;

for (InputMethodInfo imi : mMethodList) {

if (defIm == null) {

if (InputMethodUtils.isValidSystemDefaultIme(

mSystemReady, imi, context)) {

defIm = imi;

Slog.i(TAG, "Selected default: " + imi.getId());

}

}

}

if (defIm == null && mMethodList.size() > 0) {

defIm = InputMethodUtils.getMostApplicableDefaultIME(

mSettings.getEnabledInputMethodListLocked());

Slog.i(TAG, "No default found, using " + defIm.getId());

}

注意黄色加粗的部分,当系统暂无默认输入法时,选取适用性最广的输入法(卧草,还带这样的),并调用InputMethodUtils.getMostApplicableDefaultIME函数 ,好吧继续看下面的函数:

public static InputMethodInfo getMostApplicableDefaultIME(

List enabledImes) {

if (enabledImes != null && enabledImes.size() > 0) {

// We'd prefer to fall back on a system IME, since that is safer.

int i = enabledImes.size();

int firstFoundSystemIme = -1;

while (i > 0) {

i--;

final InputMethodInfo imi = enabledImes.get(i);

if (InputMethodUtils.isSystemImeThatHasEnglishKeyboardSubtype(imi)

&& !imi.isAuxiliaryIme()) {

Return imi;

}

if (firstFoundSystemIme < 0 && InputMethodUtils.isSystemIme(imi)

&& !imi.isAuxiliaryIme()) {

firstFoundSystemIme = i;

}

}

return enabledImes.get(Math.max(firstFoundSystemIme, 0));

android代码修改默认输入法,Android 4.3 源码下如何修改默认输入法相关推荐

  1. android输入法01:SoftKeyboard源码解析01

      本文主要介绍android自带输入法实例SoftKeyboard的源码,共分为两篇:第一篇为SoftKeyboard框架概述,第二篇为源码注释. 1.IMF简介 一个IMF结构中包含三个主要的部分 ...

  2. 【Android 安装包优化】WebP 应用 ( libwebp 源码下载 | Android.mk 和 Application.mk 构建脚本修改 | libwebp 函数库编译 )

    文章目录 一. libwebp 源码下载 二. libwebp 源码编译脚本修改 三. libwebp 函数库编译 四.参考资料 一. libwebp 源码下载 Google 提供了一系列的 WebP ...

  3. Android 系统性能优化(42)---Android代码内存优化建议-Android资源篇

    Android代码内存优化建议-Android资源篇 这篇文章主要介绍在实际Android应用程序的开发中,容易导致内存泄露的一些情况.开发人员如果在进行代码编写之前就有内存泄露方面的基础知识,那么写 ...

  4. android 输入法如何启动流程_android输入法02:openwnn源码解析01—输入流程

    android 输入法 02:openwnn 源码解析 01-输入流程 之后要开始 android 日文输入法的测试,因此现在开始研究 android 输入法.之前两 篇文章已经对 android 自 ...

  5. 安卓Android与H5双向交互MathJax展示数学公式(源码+解析)

    安卓Android与H5双向交互MathJax展示数学公式(源码+解析) 博主就今天周五又做了个需求(安卓Android与H5交互),原来上线的功能是服务器配置过来的学习报告(一个H5页面)并提供原始 ...

  6. 【Android项目】本地FM收音机开发及源码简析

    [Android项目]本地FM收音机开发及源码简析 目录 1.概述 2.收音机的基本原理 3.收音机其他信息 RDS功能 4.Android开发FM收音机源码解析 5.App层如何设计本地FM应用 6 ...

  7. Android wifi探究二:Wifi framework层源码分析

    上一篇博客初步认识了wpa_supplicant的作用和使用方法,并且尝试着梳理了wifi的大框架,不过,java层的框架我们忽略了,没有分析,也就是说上一篇博客简单的指出了wifi代码的大框架,那么 ...

  8. android 随手记 170多个示例demo源码

    下载地址:http://pan.baidu.com/s/101PEN 2012-10-1513:03   2,098,836     AdXmpp(Openfire+asmack+spark) .zi ...

  9. 戴眼镜检测和识别3:Android实现戴眼镜检测和识别(含源码,可实时检测)

    Android实现戴眼镜检测和识别(含源码,可实时检测) 目录 Android实现戴眼镜检测和识别(含源码,可实时检测) 1.戴眼镜检测和识别方法 2.戴眼镜人脸检测 3.戴眼镜识别模型训练 4.戴眼 ...

最新文章

  1. Android中dip、dp、sp、pt和px的区别
  2. 性能优化技巧 - 内存关联计算
  3. 【DIY】热水器升级加装远程wifi控制功能,esp8266远程红外控制热水器启动,新增自动定时烧水断电需求整理...
  4. Linux wildcard
  5. Kubernetes pod状态出现ImagePullBackOff的原因
  6. java web部分问题以及解决方案
  7. 实现点击打卡_打卡APP哪家强?快来看!这里有一款超好用的轻量级免费的习惯养成APP!...
  8. 设计模式(十八):责任链模式
  9. 简单介绍基于颜色的阴影检测算法
  10. ajax存储表单数据,使用ajax json将表单数据存储到数据库php
  11. Linux安装及破解密码
  12. 光强度BH1750FVI传感器时序详解
  13. android手机两年变卡,安卓手机用一两年就卡是通病,知道这几招,还可以用很久...
  14. mate30pro 优化 开发者选项_mate30pro怎么打开开发者选项
  15. PHP微信开发素材管理,PHP微信开发包,微信开发SDK
  16. 适配器的作用计算机网络,网络适配器的作用
  17. 互联网产品经理必备的工具
  18. 7个最佳实践,告诉你企业如何实施云安全监控
  19. 小妞会装机 -- 一个装机软件的开发笔记 (一)
  20. android studio lua插件,[置顶] android Studio 配置LUA 开发环境

热门文章

  1. 大三暑期去上海亚信实习日记
  2. GPS常识-A版(详)
  3. 阅读笔记:An explainable deep-learning algorithm for the detection of acute intracranial haemorrhage from
  4. python 区别None与数字0
  5. 网卡启动报错 No suitable device found: no device found for connection ‘System eth0‘ [FAILED]
  6. 斗鱼服务器炸了要修复嘛,继旭旭宝宝后,枪魂冰子入驻斗鱼,服务器又要炸了...
  7. EasyBCD引导Ubuntu出错(警告)“EasyBCD and UEFI”
  8. LeetCode | 77. Combinations
  9. 2022重庆自考本科怎么考?
  10. Solidworks高版本如何转换为低版本