相关疑难解决方法(0)

针对 Android 11 时 SpeechRecognizer 不可用

虽然测试增加了targetLevel 30后的应用程序,我发现SpeechRecognizer没有提供任何更多,即SpeechRecognizer.isRecognitionAvailable() 总是返回false。

如果我将 targetLevel 设置回 29,而不更改任何其他内容,则它再次可用。这发生在真实设备(Pixel 3a)和模拟器上。

这似乎不是行为改变。Recognizer API 提到的唯一要求是Manifest.permission.RECORD_AUDIO

我在 logcat 中也没有发现任何线索。

android android-speech-api android-11

12
推荐指数
1
解决办法
2006
查看次数

SpeechRecognizer.isRecognitionAvailable() 在 Android 11 中始终为 false

正如标题所暗示的那样,SpeechRecognizer.isRecognitionAvailable()在 Android 11 中返回 false,我不确定为什么会这样,因为设备 (Pixel 3 XL) 可以识别语音。该文档并未表明它在 API v30 中发生了变化。奇怪的是,即使isRecognitionAvailable是false ,我仍然成功获得STT提示。下面是说明这一点的示例代码。为什么 isRecognitionAvailable 检查总是错误的?无论如何,代码都不完整,但我添加了重要的相关部分:

AndroidManifest.xml
...
<uses-permission android:name="android.permission.RECORD_AUDIO" />
...
Run Code Online (Sandbox Code Playgroud)
MainActivity.kt
...
override fun onCreate(savedInstanceState: Bundle?) {
...
    if(ContextCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED) {
        if(shouldShowRequestPermissionRationale(Manifest.permission.RECORD_AUDIO)) { //rationale prompt
        }
        val requestPermissionLauncher = registerForActivityResult(ActivityResultContracts.RequestPermission()
        ){ isGranted: Boolean ->
            if(isGranted) { checkSTT() }
            else { //error perms not granted
            }
        requestPermissionLauncher.launch(Manifest.permission.RECORD_AUDIO)
    } else { checkSTT() }
}

private fun checkSTT() {
    if(SpeechRecognizer.isRecognitionAvailable(this)) { runSTT() }
    else …
Run Code Online (Sandbox Code Playgroud)

android android-speech-api android-11

5
推荐指数
1
解决办法
554
查看次数

标签 统计

android ×2

android-11 ×2

android-speech-api ×2