android - 面向 Android 11 时 SpeechRecognizer 不可用

标签 android android-11 android-speech-api

在将 targetLevel 增加到 30 后测试应用程序时,我发现 SpeechRecognizer不再可用,即 SpeechRecognizer.isRecognitionAvailable()总是返回假。
如果我将 targetLevel 设置回 29,而不更改任何其他内容,它就会再次可用。这发生在真实设备(Pixel 3a)和模拟器上。
好像不是behaviour change .识别器 API 提到的唯一要求是 Manifest.permission.RECORD_AUDIO我在 logcat 中也没有发现任何线索。

最佳答案

我终于找到了解决方案。
尝试实际使用(据称不可用)识别器会导致 logcat 中出现此消息:

10-13 09:19:50.273  1531  1799 I AppsFilter: interaction: PackageSetting{eb6a1b2 my.application.package/10225} -> PackageSetting{ab34503 com.google.android.googlequicksearchbox/10140} BLOCKED
10-13 09:19:50.273  1531  1799 W ActivityManager: Unable to start service Intent { act=android.speech.RecognitionService cmp=com.google.android.googlequicksearchbox/com.google.android.voicesearch.serviceapi.GoogleRecognitionService } U=0: not found
10-13 09:19:50.273 25348 25348 E SpeechRecognizer: bind to recognition service failed
所以问题似乎与这个new Android 11 "feature"有关,解决方案是在 list 中添加一个查询以获取被阻止的 Intent :
<manifest ...>
    <queries>
        <intent>
            <action android:name="android.speech.RecognitionService" />
        </intent>
    </queries>

关于android - 面向 Android 11 时 SpeechRecognizer 不可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64319117/

相关文章:

android - 应用程序小部件android中的 ListView

android - 将文本从 string.xml 设置为 TextView 不起作用

android - 如何在android中等待语音识别的结果?

android - CCGLSurfaceView 错误

android - GPS跟踪的前台服务在一段时间后停止工作

java - 由于不符合所有文件访问权限政策,Google Play 商店不断被拒绝

Android 11 语音搜索按钮不显示

android - Android 语音识别的滞后问题

java - TextToSpeech 无法正确停止

java - 当我使用 proguard 混淆(Android Jack 编译器)时,我的应用程序崩溃了