Android 14启用输入法时触发SecurityException问题求助
Android 14(SDK 34)输入法功能SecurityException异常解决方案
之前在Android系统中正常运行的输入法启用功能,在Android 14(SDK 34)环境下测试时触发如下致命异常:
Fatal Exception: java.lang.SecurityException: Settings key: <enabled_input_methods> is only readable to apps with targetSdkVersion lower than or equal to: 33 at android.provider.Settings$NameValueCache.getStringForUser(Settings.java:3547) at android.provider.Settings$Secure.getStringForUser(Settings.java:9482) at android.provider.Settings$Secure.getString(Settings.java:9448)
问题原因
Android 14(SDK 34)收紧了系统设置权限,Settings.Secure.ENABLED_INPUT_METHODS仅允许targetSdkVersion ≤33的应用读取,当应用targetSdkVersion升级到34后,直接读取该设置项就会抛出SecurityException。
解决方案
- 使用系统
InputMethodManagerAPI替代直接读取系统设置,获取已启用输入法列表:InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); List<InputMethodInfo> enabledImeList = imm.getEnabledInputMethodList(); - 若需检查特定输入法是否启用,可通过
InputMethodInfo属性判断,或调用imm.isCurrentInputMethodEnabled(imeId)方法(传入对应输入法ID)。
适配注意事项
- 升级targetSdkVersion到34后,必须移除所有直接读取
Settings.Secure.ENABLED_INPUT_METHODS的代码。 - 测试时覆盖Android 14及更低版本,
getEnabledInputMethodList()在低版本系统中同样兼容,不会出现兼容问题。
内容的提问来源于stack exchange,提问作者Tayyab Amin
相关产品推荐
相关产品推荐

