SpeechRecognizer, Android 11 hedeflenirken kullanılamaz

Oct 12 2020

TargetLevel'i 30'a yükselttikten sonra bir uygulamayı test ederken, SpeechRecognizer'ın artık kullanılamadığını, yani SpeechRecognizer.isRecognitionAvailable()her zaman false döndürdüğünü gördüm .

TargetLevel'i başka hiçbir şeyi değiştirmeden 29'a geri ayarlarsam, tekrar kullanılabilir. Bu gerçek bir cihazda (Pixel 3a) ve emülatörde gerçekleşir.

Bir davranış değişikliği gibi görünmüyor . Recognizer API tarafından belirtilen tek gereksinim,Manifest.permission.RECORD_AUDIO

Ayrıca logcat'te hiçbir ipucu bulamadım.

Yanıtlar

11 bwt Oct 13 2020 at 08:41

Sonunda bir çözüm buldum.

(Mevcut olmadığı iddia edilen) tanıyıcıyı gerçekten kullanmaya çalışmak, logcat'te şu mesaja yol açar:

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

Dolayısıyla sorun, bu yeni Android 11 "özelliği" ile ilgili gibi görünüyor ve çözüm, engellenen amaç için bildirime bir sorgu eklemekti:

<manifest ...>
    <queries>
        <intent>
            <action android:name="android.speech.RecognitionService" />
        </intent>
    </queries>