android - 为什么我使用 SpeechRecognizer 的 Android 应用在升级到 Android 12 后停止工作?

标签 android speech-recognition

我有一个个人 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

最佳答案

此问题似乎来自相应设备的底层 SpeechRecognizer 引擎,在本例中为 AiAiSpeechRecognition。
AiAiSpeechRecognition 是 Android System Intelligence 的一部分适用于 LiveCaption 等功能的 Android 12 新软件包。
但是,它似乎(目前)与 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"
    )
);
请注意,通过这样做,
  • 您在上述设置菜单中覆盖用户的选择。
  • 您使您的应用程序依赖于 Google 的语音服务,使其无法在没有它的设备上运行。
  • 当 Google 重命名现在硬引用的内部服务类时,您的应用程序会崩溃。

  • 因此,这应该用作 临时解决方法 只要。
    据我所知,Android System Intelligence 被选为 SpeechRecognizer 引擎这一事实是 Android 12 中的一个错误,应该由 Google 修复。我还没有搜索谷歌的问题跟踪器,也许应该在那里提交。

    关于android - 为什么我使用 SpeechRecognizer 的 Android 应用在升级到 Android 12 后停止工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69827554/

    相关文章:

    android - 为什么它在开始监听之前不休眠 3 秒?

    android - Android Auto 应用程序可以在实际设备上进行测试吗?

    android - 如何使用最新的 ActivityScenarioRule/ActivityScenario 放置额外数据?[Espresso/Jetpack]

    android - 在 tabhost 中切换选项卡后关闭软键盘

    objective-c - 出现类似 [Utility] +[AFAggregator logDictationFailedWithError :] Error Domain=kAFAssistantErrorDomain Code=209 "(null)" 的错误

    Android Speech to Text Api Google - 通知

    python - 在python中的单词上拆分语音音频文件

    android - CENTER_CROP 不保持图像比例

    android - 如何根据EditText属性调整TextView的高度和宽度?

    javascript - Google Chrome 语音转文本 API JavaScript 连续不起作用?