在将目标级别提高到30后,我测试一个应用程序时发现SpeechRecognizer不再可用,即SpeechRecognizer.isRecognitionAvailable()
一直返回false。
如果我将目标级别改回29而不更改其他任何内容,则它又可用了。这在真实设备(Pixel 3a)和模拟器上都会发生。
这似乎不是行为变更。 Recognizer API 中仅提到了Manifest.permission.RECORD_AUDIO
的要求。
我还在logcat中找不到线索。
在将目标级别提高到30后,我测试一个应用程序时发现SpeechRecognizer不再可用,即SpeechRecognizer.isRecognitionAvailable()
一直返回false。
如果我将目标级别改回29而不更改其他任何内容,则它又可用了。这在真实设备(Pixel 3a)和模拟器上都会发生。
这似乎不是行为变更。 Recognizer 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
所以,问题似乎与这个新的Android 11“功能”有关,解决方法是在受阻止的意图清单中添加一个查询:
<manifest ...>
<queries>
<intent>
<action android:name="android.speech.RecognitionService" />
</intent>
</queries>