首页 > 其他分享 >Android11 系统修改 AOSP输入法的默认输入键盘布局

Android11 系统修改 AOSP输入法的默认输入键盘布局

时间:2024-05-25 15:37:56浏览次数:27  
标签:输入法 Secure Android11 默认 AOSP INPUT android com

系统自带的输入法源码在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

安卓系统修改默认输入键盘_mf34键盘在线修改-CSDN博客

Android 9.0 默认输入法的设置流程分析 - 二的次方 - 博客园 (cnblogs.com)

标签:输入法,Secure,Android11,默认,AOSP,INPUT,android,com
From: https://www.cnblogs.com/kato-T/p/18212449

相关文章

  • Ubuntu输入法安装
    1、更新软件资源sudoaptupdate2、安装输入法\3、安装sudoaptinstallfcitxdcitx-googlepinyin4、重启reboot5、选择配置6、添加中文输入法7、到终端或文本测试是否安装成功......
  • Android11快速编译并替换framework.jar
    Android11快速编译并替换framework.jar在Android11之前修改了framework相关代码,只需makeframework就可以编译出framework.jar。在Android11,这个编译命令不起作用了,根据framework/base/目录下Android.bp中的提示:java_library{name:"framework-minus-apex",defaults:......
  • ubuntu安装搜狗输入法
    1下载所需文件搜狗输入法2.3以后的版本,不能自定义皮肤及不能登录用户账号,这里提供2.3.1版本的安装包及后面要用的字体链接:https://pan.baidu.com/s/163gwUPOWl8KLHO3cOsvD6g?pwd=a09r提取码:a09r2安装输入法安装过程参考搜狗输入法官网:https://shurufa.sogou.com/linux/guid......
  • AOSP下载编译
    本例程使用清华镜像站提供的AOSP。1.Android镜像使用帮助注意:本镜像是AOSP镜像,AndroidSDK因版权原因,我们不能提供镜像服务。可访问<https://cs.android.com>或<https://github.com/aosp-mirror>在线搜索及浏览AOSP源码。参考Google教程<https://source.androi......
  • 解除搜狗输入法Ctrl+Space(Ctrl+空格)占用(未解决)
    描述按下Ctrl+space时,中文输入法会切换语言而不是映射为对应的快捷键操作(如代码建议)后来发现其实不只是搜狗的问题,换了个讯飞还是有这个问题。试错解决(不完美)使用微软拼音治标不治本,微软拼音可以解除占用,但是改回搜狗又不行了。因此这个方法适用于能用的惯微软拼音的人。反......
  • Smart IME 智能切换中文与英文输入法 - vscode插件推荐
    SmartIME智能切换中文与英文输入法-vscode插件推荐IDEA插件SmartInputVSCode插件SmartIME插件SmartIME本文是针对vscode插件,正常安装SmartIME,就自动安装另外2个插件了SmartIME需要安装IMEandCursor与HyperScopes插件。缺点vscode下,只能是中文......
  • kde 配置 中州韵(小狼毫)输入法
    KDE桌面配置中州韵输入法简记,以便后续使用。gnome下的ibus等有空折腾补充环境:roc@debian:~$uname-aLinuxdebian6.1.0-18-amd64#1SMPPREEMPT_DYNAMICDebian6.1.76-1(2024-02-01)x86_64GNU/Linuxroc@debian:~$cat/etc/debian_version12.5roc@debian:~$fcit......
  • Windows开源输入法 - RIME输入法
    前言#上一篇文章介绍了Windows下的包管理器,本文继续介绍输入法。事实上Windows的输入法生态比Linux/Mac丰富很多,不过很多国产输入法存在窃取隐私、植入广告、乱安装流氓软件等问题,现在有开源的RIME输入法可以选择,何必受这气呢......
  • chsime.exe 是 Windows 系统中的一个文件,它是中文输入法编辑器的主要执行文件。这个文
    chsime.exe是Windows系统中的一个文件,它是中文输入法编辑器的主要执行文件。这个文件通常用于启动和管理中文输入法,使用户能够在Windows系统中输入中文字符。通常情况下,当用户需要在Windows系统中输入中文时,他们可以通过点击任务栏上的语言栏或使用快捷键切换到中文输......
  • 解决ubuntu安装搜狗输入法后只能打字母
    去搜狗输入法官网按照步骤一步一步安装,结果不能正常使用。只能打字母,无法输出中文。卸载重装了几次还是不行。怀疑是最新的搜狗输入法和ubuntu20.04不匹配,升级到22.04还是不行。配置了很久搜狗输入法,不是配置的问题。从网上寻找解决办法。看到一篇帖子说是从ubuntu论坛上找到的......