SpeechRecognizer 在定位 Android 11 时不可用

SpeechRecognizer not available when targeting Android 11

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

如果我将 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" 有关,解决方案是为被阻止的意图向清单添加查询:

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