SpeechRecognizer недоступен при таргетинге на Android 11
При тестировании приложения после увеличения targetLevel до 30 я обнаружил, что SpeechRecognizer больше не доступен, т.е. SpeechRecognizer.isRecognitionAvailable()всегда возвращает false.
Если я установлю targetLevel обратно на 29, ничего не меняя, он снова станет доступен. Это происходит на реальном устройстве (Pixel 3a) и в эмуляторе.
Похоже, это не изменение поведения . Единственное требование, упомянутое Recognizer API, - этоManifest.permission.RECORD_AUDIO
Я также не нашел подсказки в журнале.
Ответы
Наконец-то я нашел решение.
Попытка фактически использовать (предположительно недоступный) распознаватель приводит к этому сообщению в 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>