找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 4931|回复: 0

Android内置第三方输入法

[复制链接]

483

主题

47

回帖

7274

积分

管理员

积分
7274
发表于 2019-8-24 22:55:00 | 显示全部楼层 |阅读模式
Android内置第三方输入法

本篇讲诉如何再安卓源码中内置第三方输入法,并设为默认输入法启动,以及过程中可能引起的一些其他系统Bug处理:

    内置输入法关联源码
    各第三方输入法ID
    以讯飞为例内置方法
    设置默认首选第三方输入法引起的系统问题

一、内置输入法关联源码

    frameworks/base/packages/SettingsProvider/res/values/defaults.xml
    frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java

二、各第三方输入法ID

输入法的ID一定要使用正确,否则设置默认启用内置的输入法的时候就会出现很多坑,比如我在内置讯飞的时候在网上查找讯飞输入法ID,写成了com.iflytek.inputmethod/.iFlyIME,导致默认不能开启讯飞浪费了很多时间。以下是整理的各输入法ID的正确值,仅供参考!

    讯飞输入法:com.iflytek.inputmethod/.FlyIME
    搜狗输入法:com.sohu.inputmethod.sogou/.SogouIME
    百度输入法:com.baidu.input/.ImeService
    谷歌输入法:com.google.android.inputmethod.pinyin/.PinyinIME
    触宝输入法:com.cootek.smartinput5/.TouchPalIME
    腾讯输入法:com.tencent.qqpinyin/.QQPYInputMethodService

三、内置讯飞输入法

关于如何内置应用的方法这里就不再过度的记录,具体见[内置应用][http://blog.csdn.net/u014304560/article/details/73470127];

    从官网获取讯飞输入法的apk,并内置到系统中
    将该apk内置到系统中,安卓mk文件写法如下:

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := FlyIME
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_MODULE_CLASS := APPS
LOCAL_PACKAGE_NAME := FlyIME
LOCAL_MODULE_PATH := $(TARGET_OUT_SYSTEM_APPS)
LOCAL_SRC_FILES := FlyIME.apk
LOCAL_CERTIFICATE := PRESIGNED

LOCAL_PREBUILT_JNI_LIBS := \
            lib/armeabi/libcom_iflytek_inputmethod_bundlesetting.so \
            lib/armeabi/libcom_iflytek_inputmethod_mmp.so \
            lib/armeabi/libdexopt.so \
            lib/armeabi/libMetaVAD-v1.so \
            lib/armeabi/libmsc-v8.so \
            lib/armeabi/libNativeCrashCollect.so \
            lib/armeabi/libsmartaiwrite-jni-v23.so \
            lib/armeabi/libvadLib-v5.so \
            lib/armeabi/libvipfont.so

#LOCAL_MULTILIB := 64

include $(BUILD_PREBUILT)

3.源代码的修改

    frameworks/base/packages/SettingsProvider/res/values/defaults.xml
    添加一行:
    <string name="default_input_method" translatable="false">com.iflytek.inputmethod.FlyIME</string>
    alps/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(?,?);");
       ...
       ...
loadStringSetting(stmt, Settings.Secure.DEFAULT_INPUT_METHOD,
                    R.string.default_input_method);
       ...
       ...
       }
}


增加loadStringSetting设置默认输入法一行代码。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|爱淘机论坛 ( 鲁ICP备2022040313号-4 )

GMT+8, 2024-12-22 10:29 , Processed in 0.024279 second(s), 24 queries .

Powered by 爱淘机论坛

© 2001-2023

快速回复 返回顶部 返回列表