前言

在一些Android项目中往往需要预置第三方输入法或自己的输入法,这篇文章就简单讲解如何预置第三方输入法apk及设置默认输入法

结果展示

在介绍基本的调整方法前,先看看效果图, 如下

调整方法

  • 代码位置

/frameworks/base/packages/SettingsProvider/res/values/defaults.xml

/frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java

/frameworks/base/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java

  • 修改步骤

(一) 设置启用的输入方法列表 /frameworks/base/packages/SettingsProvider/res/values/defaults.xml

比如我们添加一个输入法,包名及名称为:net.myself.inputmethod.swpinyin2/.SWIME,defaults.xml加入两个字符串常量,设置可选输入法列表及默认输入法如下:

1 <string name="enabled_input_methods" translatable="false">net.myself.inputmethod.swpinyin2/.SWIME:com.android.inputmethod.latin/.LatinIME</string>
2 <string name="default_input_method" translatable="false">net.sunniwell.inputmethod.swpinyin2/.SWIME</string>

enabled_input_methods ==> 启用的输入方法列表

default_input_method     ==> 默认输入法

(二) 加载到Setings数据库 /frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java

DatabaseHelper.java的loadSecureSettings方法中加入:

1 loadStringSetting(stmt, Settings.Secure.ENABLED_INPUT_METHODS, R.string.enabled_input_methods);
2 loadStringSetting(stmt, Settings.Secure.DEFAULT_INPUT_METHOD, R.string.default_input_method);

(三) 默认授予输入法必要权限 /frameworks/base/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java

在DefaultPermissionGrantPolicy.java的grantDefaultSystemHandlerPermissions函数中,加入

注:权限根据实际需求修改

 1 PackageParser.Package MY_IME2 = getSystemPackage("net.myself.inputmethod.swpinyin2");
2 if(MY_IME2 != null && doesPackageSupportRuntimePermissions(MY_IME2)){
3 grantRuntimePermissions(MY_IME2, MICROPHONE_PERMISSIONS, userId);
4 grantRuntimePermissions(MY_IME2, STORAGE_PERMISSIONS, userId);
5 grantRuntimePermissions(MY_IME2, CONTACTS_PERMISSIONS, userId);
6 grantRuntimePermissions(MY_IME2, LOCATION_PERMISSIONS, userId);
7 grantRuntimePermissions(MY_IME2, CAMERA_PERMISSIONS, userId);
8 grantRuntimePermissions(MY_IME2, PHONE_PERMISSIONS, userId);
9 grantRuntimePermissions(MY_IME2, CALENDAR_PERMISSIONS, userId);
10 }

(四) 将需要预置的输入法apk预编译进image,打包,重新烧写系统

经过如上调整,就可以在Settings中看到添加的第三方输入法了,而且可以在Android原生输入法和自己预置的输入法间切换。

如果不需要Android原生输入法可以将其直接删掉。

大功告成!!

Android 9.0 添加预置第三方输入法/设置默认输入法(软键盘)的更多相关文章

  1. Android开发,在Activity启动时,默认隐藏软键盘。和遮挡Edittext时的处理

    在Activity启动时,默认隐藏软键盘: 在AndroidManifest.xml中找到你得Activity ,为它添加属性: android:windowSoftInputMode="s ...

  2. 为 Android 8.0 添加开机启动脚本【转】

    本文转载自:https://zhuanlan.zhihu.com/p/32868074 本人对于 SELinux for Android 理解不深,下文中的各文件及安全规则虽都是我所编写,但也是一边查 ...

  3. Android设置输入框和软键盘动态悬浮

    <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android=&q ...

  4. win10 设置默认输入法为英文,ctrl +shift切换中文

    控制面板-更改输入法,这个界面出现的是电脑现在安装的语言,每个语言中可能有多个输入法,比如我的有微软的和qq的,谁在上谁就是系统的默认语言(本人当然是中文在上),英文中有美式键盘. 如果想要电脑启动的 ...

  5. win8.1 设置默认输入法为英文

    win8.1中文版 输入法默认为微软拼音且为中文,此事在使用类似cmd就很不方便了,这里我们只需要将输入法设置为 “允许我为每个应用窗口设置不同的输入法”即可,操作如下:

  6. android制,点击EditText时刻,隐藏系统软键盘,显示光标

    由于项目中要用自己定义的随机键盘,所以必须得屏蔽系统软键盘,可是在4.0的測试系统来看,使用editText.setInputType(InputType.TYPE_NULL)方法固然能隐藏键盘,可是 ...

  7. (原)android的alertdialog中加入edittext但是不弹出软键盘等问题的解决与原因

    摘要:alertdialog中加入edittext但是不弹出软键盘等问题网上有很多不管用的解决方案, 本文意在给出更有效的解决办法,并初步探究其原因 正文 在对话框中插入文本框是十分常见的需求 通常我 ...

  8. android 6.0添加权限

        @Override    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissio ...

  9. Win10下设置默认输入法与默认中文输入

    实现的效果: 把自己需要的一个或多个输入法软件添加到输入法列表中(一般就指定一个),避免了需要在打字时Ctrl + Shift等快捷键在多个输入法中不停切换的麻烦 首选语言默认为中文,毕竟作为一个中国 ...

随机推荐

  1. 案例分享:Qt西门子机床人机界面以及数据看板定制(西门子通讯,mysql数据库,生产信息,参数信息,信息化看板,权限控制,播放器,二维图表,参数调试界面)

    若该文为原创文章,转载请注明原文出处本文章博客地址:https://blog.csdn.net/qq21497936/article/details/118685521 长期持续带来更多项目与技术分享 ...

  2. Java:代码高效优化

    本文转自阿里技术站,感谢阿里前辈提供的技术知识,微信关注 "阿里技术" 公众号即可实时学习. 1.常量&变量 1.1.直接赋值常量值,禁止声明新对象 直接赋值常量值,只是创 ...

  3. XSS challenges 1-10

    学长发的xss靶场,刚好js学完了,上手整活. 这个提示说非常简单,直接插入就完事了 <script>alert(document.domain)</script> 第二关. ...

  4. ios关键字

    self:类似JAVA中的this指针,是隐藏参数,指向当前调用方法的类 super:调用父类的方法 if(self=[super init]),是一种通用写法,赋值并测零是为了防止超类在初始化过程中 ...

  5. linux挂载光驱

    挂载光驱到linux中.linux的镜像盘中有安装oracle的所有的软件包,可以会用yum一键安装. 1.此时的linux的界面显示光驱图标 2.挂载 因为光盘里面的文件是只读模式的,yum安装时不 ...

  6. Mongo基于Java基本操作

    1.使用Maven依赖相应jar <dependency> <groupId>org.mongodb</groupId> <artifactId>mon ...

  7. C语言:变量定义

    变量定义:用于为变量分配存储空间,还可为变量指定初始值.程序中,变量有且仅有一个定义.变量声明:用于向程序表明变量的类型和名字.定义也是声明,extern声明不是定义 定义也是声明:当定义变量时我们声 ...

  8. MapReduce显示最受欢迎的Top10课程(按照课程编号)

    上篇博客已经说过,会将代码进行优化,并通过TreeMap进行排序实现,现在简单说明一下代码的思路. 项目以上传到github:https://github.com/yandashan/MapReduc ...

  9. 认识vue-cli脚手架

    ps:脚手架系列主要记录我自己(一名前端小白)对脚手架学习的一个过程,如有不对请帮忙指点一二! [抱拳] 作为一名前端开发工程师,平时开发项目大多都离不开一个重要的工具,那就是脚手架.下面让我们来了解 ...

  10. PAT甲级:1064 Complete Binary Search Tree (30分)

    PAT甲级:1064 Complete Binary Search Tree (30分) 题干 A Binary Search Tree (BST) is recursively defined as ...