我有一个个人 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"
)
);
请注意,通过这样做,因此,这应该用作 临时解决方法 只要。
据我所知,Android System Intelligence 被选为 SpeechRecognizer 引擎这一事实是 Android 12 中的一个错误,应该由 Google 修复。我还没有搜索谷歌的问题跟踪器,也许应该在那里提交。
关于android - 为什么我使用 SpeechRecognizer 的 Android 应用在升级到 Android 12 后停止工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69827554/