SpeechRecognizer недоступен при таргетинге на Android 11

Oct 12 2020

При тестировании приложения после увеличения targetLevel до 30 я обнаружил, что SpeechRecognizer больше не доступен, т.е. SpeechRecognizer.isRecognitionAvailable()всегда возвращает false.

Если я установлю targetLevel обратно на 29, ничего не меняя, он снова станет доступен. Это происходит на реальном устройстве (Pixel 3a) и в эмуляторе.

Похоже, это не изменение поведения . Единственное требование, упомянутое Recognizer API, - этоManifest.permission.RECORD_AUDIO

Я также не нашел подсказки в журнале.

Ответы

11 bwt Oct 13 2020 at 08:41

Наконец-то я нашел решение.

Попытка фактически использовать (предположительно недоступный) распознаватель приводит к этому сообщению в 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>