随笔 - 101  文章 - 0  评论 - 185  阅读 - 65万

Android 9.0 添加预置第三方输入法/设置默认输入法(软键盘)


Android 输入法设置文章

  Android 9.0 默认输入法的设置流程分析

Android 9.0 添加预置第三方输入法/设置默认输入法(软键盘)


  

前言

在一些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>
View Code

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);
View Code

 

(三) 默认授予输入法必要权限 /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 }
View Code
复制代码

 

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

 

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

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

大功告成!!

 

 

 

 

posted on   二的次方  阅读(3947)  评论(2编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示