面向 Android 11 时 SpeechRecognizer 不可用

Posted

技术标签:

【中文标题】面向 Android 11 时 SpeechRecognizer 不可用【英文标题】:SpeechRecognizer not available when targeting Android 11 【发布时间】:2021-01-26 20:11:45 【问题描述】:

在将 targetLevel 增加到 30 后测试应用程序时,我发现 SpeechRecognizer 不再可用,即 SpeechRecognizer.isRecognitionAvailable() 总是返回 false。

如果我将 targetLevel 设置回 29,而不更改任何其他内容,它就会再次可用。这发生在真实设备(Pixel 3a)和模拟器上。

它似乎不是behaviour change。识别器 API 提到的唯一要求是 Manifest.permission.RECORD_AUDIO

我在logcat中也没有发现任何线索。

【问题讨论】:

【参考方案1】:

我终于找到了解决办法。

尝试实际使用(据称不可用)识别器会导致 logcat 中出现此消息:

10-13 09:19:50.273  1531  1799 I AppsFilter: interaction: PackageSettingeb6a1b2 my.application.package/10225 -> PackageSettingab34503 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"有关,解决方案是在清单中添加查询以获取被阻止的意图:

<manifest ...>
    <queries>
        <intent>
            <action android:name="android.speech.RecognitionService" />
        </intent>
    </queries>

【讨论】:

哇,不错的发现。 你好,你能检查一下这个问题***.com/questions/65476014/… 哇,真的没想到会这样。谢谢你,伙计! 伟大的发现人,问题的确切解决方案。 +1 添加意图会导致另一个问题出现在“:app:processDebugMainManifest”中。不添加意图标签,应用程序运行但语音识别不起作用

以上是关于面向 Android 11 时 SpeechRecognizer 不可用的主要内容,如果未能解决你的问题,请参考以下文章

Android 11 用户无法授予后台位置权限?

谷歌强制要求Android11支持无缝更新;GitHub私有仓库完全免费面向团队提供;拼多多推出好物种草平台多多比优

面向 Android 时,为啥我的 TextField 在屏幕上如此之小?

字节码插桩Android 打包流程 | Android 中的字节码操作方式 | AOP 面向切面编程 | APT 编译时技术

Google Play Target API 级别要求

在android opengl es中检测面向相机的立方体的一侧