android代码修改默认输入法,Android 4.3 源码下如何修改默认输入法
应项目(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 源码下如何修改默认输入法相关推荐
- android输入法01:SoftKeyboard源码解析01
本文主要介绍android自带输入法实例SoftKeyboard的源码,共分为两篇:第一篇为SoftKeyboard框架概述,第二篇为源码注释. 1.IMF简介 一个IMF结构中包含三个主要的部分 ...
- 【Android 安装包优化】WebP 应用 ( libwebp 源码下载 | Android.mk 和 Application.mk 构建脚本修改 | libwebp 函数库编译 )
文章目录 一. libwebp 源码下载 二. libwebp 源码编译脚本修改 三. libwebp 函数库编译 四.参考资料 一. libwebp 源码下载 Google 提供了一系列的 WebP ...
- Android 系统性能优化(42)---Android代码内存优化建议-Android资源篇
Android代码内存优化建议-Android资源篇 这篇文章主要介绍在实际Android应用程序的开发中,容易导致内存泄露的一些情况.开发人员如果在进行代码编写之前就有内存泄露方面的基础知识,那么写 ...
- android 输入法如何启动流程_android输入法02:openwnn源码解析01—输入流程
android 输入法 02:openwnn 源码解析 01-输入流程 之后要开始 android 日文输入法的测试,因此现在开始研究 android 输入法.之前两 篇文章已经对 android 自 ...
- 安卓Android与H5双向交互MathJax展示数学公式(源码+解析)
安卓Android与H5双向交互MathJax展示数学公式(源码+解析) 博主就今天周五又做了个需求(安卓Android与H5交互),原来上线的功能是服务器配置过来的学习报告(一个H5页面)并提供原始 ...
- 【Android项目】本地FM收音机开发及源码简析
[Android项目]本地FM收音机开发及源码简析 目录 1.概述 2.收音机的基本原理 3.收音机其他信息 RDS功能 4.Android开发FM收音机源码解析 5.App层如何设计本地FM应用 6 ...
- Android wifi探究二:Wifi framework层源码分析
上一篇博客初步认识了wpa_supplicant的作用和使用方法,并且尝试着梳理了wifi的大框架,不过,java层的框架我们忽略了,没有分析,也就是说上一篇博客简单的指出了wifi代码的大框架,那么 ...
- android 随手记 170多个示例demo源码
下载地址:http://pan.baidu.com/s/101PEN 2012-10-1513:03 2,098,836 AdXmpp(Openfire+asmack+spark) .zi ...
- 戴眼镜检测和识别3:Android实现戴眼镜检测和识别(含源码,可实时检测)
Android实现戴眼镜检测和识别(含源码,可实时检测) 目录 Android实现戴眼镜检测和识别(含源码,可实时检测) 1.戴眼镜检测和识别方法 2.戴眼镜人脸检测 3.戴眼镜识别模型训练 4.戴眼 ...
最新文章
- Android中dip、dp、sp、pt和px的区别
- 性能优化技巧 - 内存关联计算
- 【DIY】热水器升级加装远程wifi控制功能,esp8266远程红外控制热水器启动,新增自动定时烧水断电需求整理...
- Linux wildcard
- Kubernetes pod状态出现ImagePullBackOff的原因
- java web部分问题以及解决方案
- 实现点击打卡_打卡APP哪家强?快来看!这里有一款超好用的轻量级免费的习惯养成APP!...
- 设计模式(十八):责任链模式
- 简单介绍基于颜色的阴影检测算法
- ajax存储表单数据,使用ajax json将表单数据存储到数据库php
- Linux安装及破解密码
- 光强度BH1750FVI传感器时序详解
- android手机两年变卡,安卓手机用一两年就卡是通病,知道这几招,还可以用很久...
- mate30pro 优化 开发者选项_mate30pro怎么打开开发者选项
- PHP微信开发素材管理,PHP微信开发包,微信开发SDK
- 适配器的作用计算机网络,网络适配器的作用
- 互联网产品经理必备的工具
- 7个最佳实践,告诉你企业如何实施云安全监控
- 小妞会装机 -- 一个装机软件的开发笔记 (一)
- android studio lua插件,[置顶] android Studio 配置LUA 开发环境
热门文章
- 大三暑期去上海亚信实习日记
- GPS常识-A版(详)
- 阅读笔记:An explainable deep-learning algorithm for the detection of acute intracranial haemorrhage from
- python 区别None与数字0
- 网卡启动报错 No suitable device found: no device found for connection ‘System eth0‘ [FAILED]
- 斗鱼服务器炸了要修复嘛,继旭旭宝宝后,枪魂冰子入驻斗鱼,服务器又要炸了...
- EasyBCD引导Ubuntu出错(警告)“EasyBCD and UEFI”
- LeetCode | 77. Combinations
- 2022重庆自考本科怎么考?
- Solidworks高版本如何转换为低版本