Android11 系统修改 AOSP输入法的默认输入键盘布局
1.Android 11 -- 强制清理app后台,关于权限引发的问题2.Android 11 (MTK)状态栏图标反色-->跟随当前应用变化代码流程3.Android 11 --关于Toast的异常4.Android 11 -- 关于dialog和悬浮窗导致SystemUI状态栏下拉频繁闪烁(窗口焦点问题)5.Android 11 下拉菜单长按WiFi图标SystemUI ANR6.Android 11 sim卡来电不弹出悬浮通知,默认来电默认全屏7.Android Bluetooth 蓝牙开发/蓝牙协议 小结8.Android11 —— 自定义添加一个System Services9.Android系统——AOSP相关-->随记10.Android11 , Launcher3 切换阿拉伯语,最近应用(后台)不能滑动11.Android 底层问题日志记录12.Android 11 -- app 服务保活13.Android11 - 添加自定义服务注意事项14.Android 11 导航栏添加一个虚拟按钮--问题合集15.Android 11--设置第三方Launcher并默认 与 如何预置apk
16.Android11 系统修改 AOSP输入法的默认输入键盘布局
17.Settings里面切换不同Launcher的代码流程18.关于Android`系统默认屏保`19.关于Android 11 Settings添加新的选项界面的细节20.Android 11 自由窗口模式 || 全屏模式启动app21.强制app横屏显示或者竖屏显示(动态)22.Android 11 禁止从SD卡上安装第三方应用23.实体物理音量键替换为home键24.AMS- kill Launcher进程的代码流程25.Android 11 recovery恢复出厂设置保留某些文件26.Android 11 禁用 adb root (userdebug版本)27.Android11 应用默认获取通知使用权限(可以获取系统所有通知信息)28.Android 11 UsbDebug 关于adb RSA 认证29.Android 11 NavigationBar && Status Bar 如果改变背景颜色30.Anroid 11 关于NotificationManager && NotificationManagerService -- 衍生到权限管理31.Android13 控制设置界面 双栏显示或单栏显示32.Android 13 大屏显示时关于SystemUI和Launcher3问题33.Android 系统适配无源码app34.Android 11 关于app的权限重置35.Android 11.0 关于app进程保活36.Android 11 关于按键拦截/按键事件处理分享37.Android R Settings关于屏保/PowerManagerService欺骗系统不让其进入休眠状态38.Android13 关于SystemUI更新/Nav Bar add volume button&&other button39.Android 13 移植EthernetSettings/Ethernet更新40.Anrdoir 13 关于设置静态IP后,突然断电,在上电开机卡动画41.Android T(13) The app is granted permissions by default42.Android T 关于屏幕旋转 (一)43.Android T about screen rotation(二)44.Android 13 about launcher3 (1)45.Android T don't abort background activity starts46.Android T adout replace bootanimation47.Launcher start App WINDOWING_MODE_FREEFORM48.Android 11 About SleepToken / (Settings)Screen timeout49.Settings.System数据监听/prop&SystemProperties数据监听系统自带的输入法源码在packages\inputmethods\目录,像谷歌输入法和谷歌拼音输入法的源码都是在这里!
系统的默认输入法,修改掉其系统的语言,输入法键盘布局也会改变!
因为系统中的Android键盘(AOSP)有个语言设置选项,里面默认的是“使用系统语言”,
现在客户要求关闭默认“使用系统语言”,默认语言是英语,但是键盘要其它语言的
默认输入键盘布局由Settings.Secure.SELECTED_INPUT_METHOD_SUBTYPE属性报错,保存的值是一个哈希码-921088104,对应其默认输入语言 。
在设置输入法的时候,传入输入法默认输入语言的哈希值,达到修改输入键盘布局的目的!
即在设置Settings.Secure.ENABLED_INPUT_METHODS属性值的时候,后面添加默认语言。
1.先添加输入法包名和服务名后面加输入语言的哈希值
public static final String ENABLED_INPUT_METHODS = "enabled_input_methods";
adb shell settings get secure enabled_input_methods
com.android.inputmethod.latin/.LatinIME;843948332
adb pull data/data/com.android.providers.settings/databases/settings.db
打开Secure表,查看default_input_method,enabled_input_methods和selected_input_method_subtype三个字段内容,:
default_input_method com.android.inputmethod.latin/.LatinIME
enabled_input_methods com.android.inputmethod.latin/.LatinIME;816242702;-921088104
selected_input_method_subtype 816242702
frameworks\base\packages\SettingsProvider\res\values\defaults.xml
<string name="config_enable_input_method" translatable="false">com.android.inputmethod.latin/.LatinIME;-921088104</string>
<string name="def_input_method_franch_keyboard" translatable="false">com.android.inputmethod.latin/.LatinIME;843948332</string> 法语
<string name="config_default_input_method" translatable="false">com.android.inputmethod.latin/.LatinIME</string>
// -921088104对应的是en_US,即美式英语。 获取哈希码的函数
private void getSubtypeHashCode(Context context) {
//String[] LOCAL_LANGUAGES = {"en_US","en_GB"};
final String inputmethodPackageName = "com.android.inputmethod.latin";
final InputMethodManager imm = (InputMethodManager) context.getSystemService( Context.INPUT_METHOD_SERVICE);
final StringBuilder builder = new StringBuilder();
for (InputMethodInfo info : imm.getInputMethodList()) {
if (inputmethodPackageName.equals(info.getPackageName())) {
for (int i = 0; i < info.getSubtypeCount(); i++) {
final InputMethodSubtype subtype = info.getSubtypeAt(i);
final String locale = subtype.getLocale().toString();
//for (String str : LOCAL_LANGUAGES) {
// if (str.equals(locale)) {
builder.append(locale);
builder.append(" hashcode:");
builder.append(subtype.hashCode());
builder.append("\n");
Log.i(TAG,"get local:"+ locale + "hashcode:" + subtype.hashCode());
// }
//}
}
break;
}
}
//frhashcode:843948332 法语
Log.i(TAG,"get hascode end--->"+builder.toString());
}
2.frameworks\base\packages\SettingsProvider\src\com\android\providers\settings\DatabaseHelper.java
private void loadSecureSettings(SQLiteDatabase db) {
SQLiteStatement stmt = null;
try {
stmt = db.compileStatement("INSERT OR IGNORE INTO secure(name,value)"
+ " VALUES(?,?);");
// Don't do this. The SystemServer will initialize ADB_ENABLED from a
// persistent system property instead.
//loadSetting(stmt, Settings.Secure.ADB_ENABLED, 0);
//loadSetting(stmt, Settings.Secure.ENABLED_INPUT_METHODS, defaultIme);
//loadSetting(stmt, Settings.Secure.DEFAULT_INPUT_METHOD, defaultIme);
//demo
//loadSetting(stmt, Settings.Secure.ENABLED_INPUT_METHODS,"com.android.inputmethod.latin/.LatinIME;816242702;-921088104");//选中的输入法
//loadSetting(stmt, Settings.Secure.DEFAULT_INPUT_METHOD, "com.android.inputmethod.latin/.LatinIME");// 默认输入法为系统输入法
//loadSetting(stmt, Settings.Secure.SELECTED_INPUT_METHOD_SUBTYPE, "816242702"); // 默认输入法的默认语言
//success
+loadStringSetting(stmt, Settings.Secure.ENABLED_INPUT_METHODS,R.string.config_enable_input_method );
+loadStringSetting(stmt, Settings.Secure.DEFAULT_INPUT_METHOD,R.string.config_default_input_method );
https://blog.csdn.net/qq503393230/article/details/133762312
分类:
Android
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 【.NET】调用本地 Deepseek 模型
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库