【问题标题】:Why did my Android app using SpeechRecognizer stop working after upgrading to Android 12?为什么我使用 SpeechRecognizer 的 Android 应用在升级到 Android 12 后停止工作?
【发布时间】:2021-12-17 23:48:53
【问题描述】:

我有一个个人 Android 应用程序,可以执行我多年来在我的 Android 手机上使用的语音转文本功能。最近,我将我的 Pixel 3 更新为 Android 12 (S),并且对 SpeechRecognizer 的调用已停止工作。

我以非常标准的方式调用它:

SpeechRecognizer sr = SpeechRecognizer.createSpeechRecognizer(MainActivity.this);
sr.setRecognitionListener(listener);

ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.RECORD_AUDIO}, 1);

Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);

intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);

sr.startListening(intent);

自从升级到 Android 12 后,在调用 startListening() 后,立即调用 onError() 侦听器回调,错误代码为 ERROR_CLIENT。手机还会发出一种快速的“哔哔”故障声,尽管这表明它正在使用麦克风。

logcat 输出(如下)有一些错误,我觉得有趣的是它表明“首选离线”已启用,尽管我在 Intent 中没有它。

有什么想法吗?这是 Pixel 3 的问题吗?

021-11-03 10:11:16.471 24887-24887/? I/AiAi: AiAiSpeechRecognitionService#onStartListening
2021-11-03 10:11:16.474 24887-24887/? I/RecognitionServiceImpl: RecognitionService#onStartListening
2021-11-03 10:11:16.474 1071-4475/? D/audio_hw_primary: out_set_parameters: enter: usecase(1: low-latency-playback) kvpairs: routing=2
2021-11-03 10:11:16.474 24887-24887/? I/IntentParsingUtil: Using Locale.getDefault() for recognition: null
2021-11-03 10:11:16.474 24887-24887/? I/AiAiSpeechRecognition: [AiAi RecognitionService] session start logged
2021-11-03 10:11:16.474 24887-24887/? I/IntentParsingUtil: Using Locale.getDefault() for recognition: null
2021-11-03 10:11:16.474 24887-24887/? I/IntentParsingUtil: Using Locale.getDefault() for recognition: null
2021-11-03 10:11:16.474 24887-24887/? I/AiAiSpeechRecognition: [AiAi RecognitionService] prefer offline logged
2021-11-03 10:11:16.475 24887-24887/? I/SodaSpeechRecognizer: Offline recognizer - start listening
2021-11-03 10:11:16.475 24887-24922/? I/AiAiAudio: #startListening
   ... Some audio stuff here ...
2021-11-03 10:11:16.576 24887-4930/? I/AiAiAudio: run(): Tee read loop starting
2021-11-03 10:11:16.578 24887-24923/? E/native: E1103 10:11:16.578536   24923 language_pack_utils.cc:346] No usable config found in LP at: /data/user/0/com.google.android.as/files/superpacks/speech-recognition/aiai_en_us_v27
2021-11-03 10:11:16.578 24887-24923/? E/native: E1103 10:11:16.578691   24923 soda_impl.cc:522] Terse enabled but could not initialize processor: Terse Processor: No usable config found in LP.
2021-11-03 10:11:16.579 24887-24923/? I/SodaDetectionHandler: Initialized SODA with status: 5
2021-11-03 10:11:16.580 24887-24923/? E/SodaSpeechRecognizer: Soda recognizer failed to initialize: ConfigStatus 5!
2021-11-03 10:11:16.580 24887-24923/? W/RecognitionClient: #onError space agsa_transcription_SODA_INITIALIZATION_ERROR code 5!
2021-11-03 10:11:16.580 24887-24923/? I/AiAiSpeechRecognition: [AiAi RecognitionService] mic close logged
2021-11-03 10:11:16.580 24887-24923/? I/AiAiAudio: #stopListeningAndCleanUpSession
2021-11-03 10:11:16.580 24887-24923/? I/AiAiAudio: stop(): Stopping AudioTee
2021-11-03 10:11:16.582 14403-14403/com.example.tester_ii_s I/FU: onError: 5
2021-11-03 10:11:16.582 24887-24922/? I/AiAiSpeechRecognition: [AiAi RecognitionService] session end logged

【问题讨论】:

  • 我遇到了同样的问题。真的很困惑。
  • 汤姆,这是在什么设备上运行的?像素还是其他?
  • Pixel 4。但它现在又能正常工作了,我不确定如何。新的设备上语音识别器仍然无法工作
  • 谢谢 - 我的 Pixel 3 还是有问题
  • 我面临同样的错误

标签: android speech-recognition


【解决方案1】:

此问题似乎来自相应设备的底层 SpeechRecognizer 引擎,在本例中为 AiAiSpeechRecognition。

AiAiSpeechRecognition 是 Android System Intelligence 软件包的一部分,该软件包是 Android 12 的新功能,具有 LiveCaption 等功能。 但是,它似乎(目前)与 SpeechRecognizer API 不兼容。

出于某种原因,将设备升级到 Android 12 很有可能将默认 SpeechRecognizer 应用设置为 Android System Intelligence,即使它不应该这样做。

设备用户可以修复此问题,方法是进入“设置”>“应用”>“默认应用”>“数字助理应用”>“语音输入”并将其改回“Google 提供的语音服务”(您可能首先需要通过 Play 商店更新 Google 的语音服务)。 完成此操作后,Android System Intelligence 将从该设置中的选项列表中消失,这表明一开始就没有打算选择它。

您也可以仅针对您的应用以编程方式解决它。 为此,您需要专门请求 Google 提供的语音服务作为您的 SpeechRecognizer 服务:

mSpeechRecognizer = SpeechRecognizer.createSpeechRecognizer(
    mContext,
    new ComponentName(
        "com.google.android.tts",
        "com.google.android.apps.speech.tts.googletts.service.GoogleTTSRecognitionService"
    )
);

请注意,通过这样做,

  1. 您在上述设置菜单中覆盖了用户的选择。
  2. 您使您的应用依赖于 Google 的语音服务,使其无法在没有它的设备上运行。
  3. 当 Google 重命名现在硬引用的内部服务类时,您的应用可能会崩溃。

因此,这应该仅用作临时解决方法

据我所知,Android System Intelligence 被选为 SpeechRecognizer 引擎这一事实是 Android 12 中的一个错误,应该由 Google 修复。我还没有在谷歌的问题跟踪器中搜索过这个,也许应该在那里提交。

【讨论】:

  • 嗨@Woalk,你知道为什么speechrecognizer 会继续立即返回Bind to system recognition service failed with error 10吗?它甚至不调用 RecognitionLister,唯一改变的是在三星 Galaxy S21+ 上升级到 Android 12
  • 编辑:找到了解决方案,是缓存问题,清理构建并使缓存无效就可以了。现在也可以在没有解决方法的情况下工作,但是仍然存在一些问题,因为在 onResult 中,捆绑包似乎返回为空
  • @Woalk,非常感谢您提供的信息。我按照您的概述检查了语音输入设置,列出的唯一选项是“Google 语音服务”。也许我的手机以某种方式恢复了这种状态,这就是它再次开始工作的原因......???
  • 忘了提到我确实为此向 Google 提交了问题:issuetracker.google.com/issues/205021356
  • 我的说“Google 提供的语音服务”,但仍然无法使用。我仍然尝试了您的解决方案,但它是徒劳的。
【解决方案2】:

我最初收到“未安装语言包”的错误,来自前面提到的 AiAiSpeechRecognition 服务,这是我以前在我的应用程序中没有看到的。

对于上下文,我的应用程序是一个语言学习应用程序,用户正在尝试学习一种不是 Locale.default 的语言。当我检查设置 > 应用程序 > 默认应用程序 > 数字助理应用程序 > 语音输入并将其更改为 Android 系统智能时,Google 没有语音服务选项。奇怪的是,在 Play 商店中搜索此“Google 语音服务”时,我可以找到它,并且它是截至 10 月的最新版本。我尝试了明确概述 SpeechRecognition 以使用“com.google.android.tts”的建议,但它未能绑定到它,这表明该服务没有运行。

然后我卸载了 Google 的语音服务并重新安装,然后重新访问设置 > 应用程序 > 默认应用程序 > 数字助理应用程序 > 语音输入和更改,我现在可以选择语音服务。这已经解决了我的应用程序中的问题,但是 Android 系统智能选项现在从选择语音服务后可用的选项中消失了。

这肯定是操作系统中的一个错误,似乎没有一种编程方式来修复它。

【讨论】:

    猜你喜欢
    • 2021-12-28
    • 2020-09-14
    • 2023-01-15
    • 1970-01-01
    • 2020-07-03
    • 2022-08-08
    • 2021-03-20
    相关资源
    最近更新 更多