RK平台-Android15-默认讯飞输入法

提示:内置讯飞语音输入法

文章目录


前言-需求

在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设置默认输入法(附带常见输入法)

Android 15.0 系统下第三方输入法设置为默认输入法的实现指南 - 指南

Android修改默认输入法

二、修改文件

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版本,默认输入法思路完全一致的,掌握基本的技能是必不可少的
  • 这里仅做总结、经验可参考。