Android 修改系统默认输入法

部署运行你感兴趣的模型镜像

原文出处:http://www.ccbu.cc/framework/modify-default-inputmethod.html

1. 修改系统默认输入法

Android系统的默认输入法在很多情况下是无法满足我们的需求的,因此就需要OEM自己集成输入法,基础输入法到系统,并需要修改系统默认输入法的配置。

  1. 在frameworks/base/packages/SettingsProvider/res/values/defaults.xml添加
<string name="def_input_method" translatable="false">com.android.inputmethod.pinyin/.PinyinIME</string>  
  1. frameworks/base/packages/SettingsProvider/src/com/Android/providers/settings/DatabaseHelper.java的loadSecureSettings函数中添加
loadStringSetting(stmt, Settings.Secure.DEFAULT_INPUT_METHOD, R.string.def_input_method);
  1. 如使用第三方自定义输入法,请将输入法放到system/app目录打包到系统。

附:常见输入法的包名和类名

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

2. 使用ADB命令设置默认输入法

  1. 显示系统安装的输入法列表
    adb shell ime list -s

  2. 获取系统默认输入法
    adb shell settings get secure default_input_method

  3. 设置系统默认输入法
    adb shell settings put secure default_input_method com.sohu.inputmethod.sogou/.SogouIME

3. 使用代码设置系统默认输入法

public class InputMethodUtil {

	/**
	 * get system default input method
	 * @param context
	 * @return
	 */
	public static String getDefaultInputMethod(Context context) {
		return Settings.Secure.getString(context.getContentResolver(), 
				Settings.Secure.DEFAULT_INPUT_METHOD);
	}
	
	/**
	 * Set system default input method
	 * @param context
	 * @param inputMethod: input method
	 * @return
	 */
	public static boolean setDefaultInputMethod(Context context, String inputMethod) {
		return Settings.Secure.putString(context.getContentResolver(), 
				Settings.Secure.DEFAULT_INPUT_METHOD, 
				inputMethod);
	}

	/**
	 * Gets the input method that the system has installed
	 *   
	 * @param context
	 * @return installed input method list
	 */
	public static String[] getInputMethodIdList(Context context) {
		InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
		if (imm != null && imm.getInputMethodList() != null) {
			String[] methodIds = new String[imm.getInputMethodList().size()];
			for (int i = 0; i < imm.getInputMethodList().size(); i++) {
				methodIds[i] = imm.getInputMethodList().get(i).getId();
			}
			return methodIds;
		}
		return new String[] {};
	}
	
	/**
	 * update system input method with checking
	 * @param context
	 * @param inputMethod
	 * @return
	 */
	public static boolean updateDefaultInputMethod(Context context, String inputMethod) {
		if (context != null && !TextUtils.isEmpty(inputMethod)) {
			String current = getDefaultInputMethod(context);
			if (current != null && !current.equalsIgnoreCase(inputMethod)) {
				String packageName = inputMethod.substring(0, inputMethod.indexOf('/'));
				android.content.pm.ApplicationInfo info = null;
			    try {
					info = context.getPackageManager().getApplicationInfo(packageName, 0);
				} catch (NameNotFoundException e) {
					e.printStackTrace();
				}
			    if (info != null) {
			    	return setDefaultInputMethod(context, inputMethod);
			    }
			}
		}
		
		return false;
	}
}

4. Android 9.0修改默认输入法

上的修改方式在Android4.4上验证是没有问题的,在Android9.0版本上,还需要增加ENABLED_INPUT_METHODS的处理。

  1. 在frameworks/base/packages/SettingsProvider/res/values/defaults.xml添加:

    <string name="def_enabled_input_methods" translatable="false">com.android.inputmethod.pinyin/.PinyinIME</string> 
    
  2. frameworks/base/packages/SettingsProvider/src/com/Android/providers/settings/DatabaseHelper.java的loadSecureSettings函数中添加

    loadStringSetting(stmt, Settings.Secure.ENABLED_INPUT_METHODS,
                            R.string.def_enabled_input_methods);
    

使用代码设置时,还需要设置Settings.Secure.DEFAULT_INPUT_METHOD的值,Settings.Secure.DEFAULT_INPUT_METHOD的值会包含多个输入法,以:分割。

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值