SpeechRecognizer ist für Android 11 nicht verfügbar

Oct 12 2020

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

11 bwt Oct 13 2020 at 08:41

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>