提示:内置讯飞语音输入法
文章目录
前言-需求
在RK3576 Android15 版本上面内置讯飞输入法且作为默认的输入法

一、技能储备-参考资料
必备技能储备
这里面涉及到几个知识点:
- 预安装app 到系统
- 默认选择哪一个输入法,如何配置默认输入法
- 默认授权运行时权限,输入法作为一个第三方app,即使内置到系统不可卸载但无系统签名,那么就默认给运行时权限
参考资料
1、预装内置app
Rk-内置应用作为系统Launcher-内置APK-拷贝文件-替换开机动画
RK3576-Android15-内置32位应用-此应用与最新版 Android 不兼容。请检查是否有更新,或与应用开发者联系 弹框问题解决
2、默认输入法
Android系统默认输入法-搜狗输入法或者谷歌拼音输入法-运行时授权
MTK平台 Android12-Android13 默认搜狗输入法
3、运行时权限授权
Android 三大权限介绍-Android第一次开机App授权弹框-默认授权 : 搞清楚Android里面几个权限相关的介绍和区别
Rk-内置应用作为系统Launcher-内置APK-拷贝文件-替换开机动画 参考:默认授权-针对第三方应用无systemuid-自动授权 部分
Android系统默认输入法-搜狗输入法或者谷歌拼音输入法-运行时授权
4、其它资料
Android 15.0 系统下第三方输入法设置为默认输入法的实现指南 - 指南
二、修改文件
java
/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
三、修改方案
1、设置默认讯飞输入法-设置默认配置-defaults.xml
路径:/frameworks/base/packages/SettingsProvider/res/values/defaults.xml
新增配置如下:
java
<string name="xf_input_method">com.iflytek.inputmethod/.FlyIME</string>
<string name="enable_xf_input_method">com.iflytek.inputmethod/.FlyIME</string>

这里就是两个配置,从字面意思来说就是默认输入法 和 输入法可用性
注意点: 这里两个key 键知识一个键而已,默认肯定不是这个key, 这里是以项目为准的。 比如您看自己源码和参考资料可能都是 如下配置: 这个不要紧的,核心是设置地方,就是一个字符串键值对而已
2、设置默认谷歌拼音输入法-设置默认加载属性
路径/frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
简要说,我们的配置文件是需要加载到属性里面去的,看如下具体代码: 在 loadSecureSettings(SQLiteDatabase db) 方法中
java
loadStringSetting(stmt, Settings.Secure.ENABLED_INPUT_METHODS, R.string.enable_xf_input_method);
loadStringSetting(stmt, Settings.Secure.DEFAULT_INPUT_METHOD, R.string.xf_input_method);

3、设置默认讯飞输入法-权限问题
如果是讯飞输入法或者其它第三方输入法,非默认的系统输入法,需要解决运行时权限问题,默认一键授权所有权限,让输入法直接可用,不用给权限。
相关知识点 :
Android 三大权限介绍-Android第一次开机App授权弹框-默认授权 : 搞清楚Android里面几个权限相关的介绍和区别
Rk-内置应用作为系统Launcher-内置APK-拷贝文件-替换开机动画 参考:默认授权-针对第三方应用无systemuid-自动授权 部分
Android系统默认输入法-搜狗输入法或者谷歌拼音输入法-运行时授权
路径:/frameworks/base/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java

四、知识点扩展
常见输入法大全
java
QQ输入法:com.tencent.qqpinyin/.QQPYInputMethodService
搜狗输入法:com.sohu.inputmethod.sogou/.SogouIME
手心输入法:com.xinshuru.inputmethod/.FTInputService
百度输入法:com.baidu.input/.ImeService
讯飞输入法:com.iflytek.inputmethod/.FlyIME
谷歌拼音输入法:com.google.android.inputmethod.pinyin /.PinyinIME
触宝输入法:com.cootek.smartinput5/.TouchPalIME
系统默认(拉丁输入法):com.android.inputmethod.latin/.LatinIME
谷歌Gboard:com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME
Go 输入法:com.jb.emoji.gokeyboard/com.jb.gokeyboard.GoKeyboard
SwiftKey Keyboard 输入法:com.touchtype.swiftkey/com.touchtype.KeyboardService
微软必应输入法:com.bingime.ime/.BingIme
讯飞输入法获取输入法ID
输入法配置文件如上,这样写的:
java
<string name="xf_input_method">com.iflytek.inputmethod/.FlyIME</string>
<string name="enable_xf_input_method">com.iflytek.inputmethod/.FlyIME</string>
其实就是输入法ID,那么讯飞输入法ID是什么,包名肯定可以通过Apk 的AndroidMenifest.xml 找到的,那么ID 呢?

java
<service
android:icon="@ref/0x7f020000"
android:name="com.iflytek.inputmethod.FlyIME"
android:permission="android.permission.BIND_INPUT_METHOD"
android:exported="true"
android:taskAffinity="com.iflytek.inputmethod"
android:allowBackup="false">
<intent-filter
android:priority="100">
<action
android:name="android.view.InputMethod" />
<category
android:name="android.intent.category.DEFAULT" />
</intent-filter>
<meta-data
android:name="android.view.im"
android:resource="@ref/0x7f130008" />
</service>
属性ENABLED_INPUT_METHODS、DEFAULT_INPUT_METHOD机底层知识了解
参考 Android系统默认输入法-搜狗输入法或者谷歌拼音输入法-运行时授权

总结
- 默认输入法是常见的需求,必须掌握
- 无论是不同平台或者不同的Android版本,默认输入法思路完全一致的,掌握基本的技能是必不可少的
- 这里仅做总结、经验可参考。