SpeechRecognizer ist für Android 11 nicht verfügbar
Beim Testen einer Anwendung nach dem Erhöhen des Zielniveaus auf 30 stellte ich fest, dass der SpeechRecognizer nicht mehr verfügbar ist, dh SpeechRecognizer.isRecognitionAvailable()immer false zurückgibt .
Wenn ich den targetLevel auf 29 zurücksetze, ohne etwas anderes zu ändern, ist er wieder verfügbar. Dies geschieht auf einem realen Gerät (Pixel 3a) und dem Emulator.
Es scheint keine Verhaltensänderung zu sein . Die einzige von der Recognizer-API erwähnte Anforderung ist dieManifest.permission.RECORD_AUDIO
Ich habe auch keinen Hinweis im Logcat gefunden.
Antworten
Ich habe endlich eine Lösung gefunden.
Der Versuch, den (angeblich nicht verfügbaren) Erkenner tatsächlich zu verwenden, führte zu dieser Meldung im 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
Das Problem scheint also mit dieser neuen Android 11-Funktion zu zusammenhängen , und die Lösung bestand darin, dem Manifest eine Abfrage für die blockierte Absicht hinzuzufügen:
<manifest ...>
<queries>
<intent>
<action android:name="android.speech.RecognitionService" />
</intent>
</queries>