Android 检测语音输入是否已启用

Android 检测语音输入是否已启用,android,input,voice-recognition,android-inputtype,Android,Input,Voice Recognition,Android Inputtype,如果用户没有通过设置(语言和输入->谷歌语音输入)启用谷歌语音输入,我需要向用户显示警报。有什么方法可以检测到设置状态吗?所以我找到了答案。没有官方方法检测语音输入是否启用。我已经获得了一个启用的输入法列表(键盘、语音等) 在那里,我们可以看到谷歌语音输入是否启用,我们可以提醒用户打开它,但这适用于默认键盘。一些用户使用自定义键盘,这些键盘有自己的语音到文本的实现,它不依赖于谷歌语音输入的用户设置。因此,对他们来说,这将是一个假阳性 如果您知道IME的包名,可以执行以下操作: boolean i

如果用户没有通过设置(语言和输入->谷歌语音输入)启用谷歌语音输入,我需要向用户显示警报。有什么方法可以检测到设置状态吗?

所以我找到了答案。没有官方方法检测语音输入是否启用。我已经获得了一个启用的输入法列表(键盘、语音等)


在那里,我们可以看到谷歌语音输入是否启用,我们可以提醒用户打开它,但这适用于默认键盘。一些用户使用自定义键盘,这些键盘有自己的语音到文本的实现,它不依赖于谷歌语音输入的用户设置。因此,对他们来说,这将是一个假阳性

如果您知道IME的包名,可以执行以下操作:

boolean isImeEnabled(String packageName) {
    InputMethodManager imm =
        (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);

    for (InputMethodInfo imi : imm.getEnabledInputMethodList()) {
        if (imi.getPackageName().equals(packageName)) {
            return true;
        }
    }

    return false;
}

Krasimir的此命令返回com.sec.android.inputmethod/.SamsungKeypad:com.google.android.googlequicksearchbox/com.google.android.voicesearch.ime.VoiceInputMethodService。您可以检查字符串是否包含%voice%。。。
boolean isImeEnabled(String packageName) {
    InputMethodManager imm =
        (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);

    for (InputMethodInfo imi : imm.getEnabledInputMethodList()) {
        if (imi.getPackageName().equals(packageName)) {
            return true;
        }
    }

    return false;
}