首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我使用SpeechRecognizer的安卓应用在升级到安卓12后停止工作?

为什么我使用SpeechRecognizer的安卓应用在升级到安卓12后停止工作?
EN

Stack Overflow用户
提问于 2021-11-03 15:30:26
回答 2查看 470关注 0票数 3

我有一个个人Android应用程序,可以执行语音到文本的转换,我已经在Android手机上使用了很多年。最近,我把我的Pixel3更新到了Android12 (S),对SpeechRecognizer的调用停止了。

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

代码语言:javascript
复制
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);

升级到Android12后,在调用startListening()之后,会立即调用onError()监听器回调,错误码为ERROR_CLIENT。这款手机还会发出一种快速的“嘟嘟声”失败的声音,尽管它表明它正在使用麦克风。

logcat输出(如下)有一些错误,我发现有趣的是,它指示启用了“首选离线”,尽管我的意图中没有这一点。

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

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

发布于 2021-11-24 18:03:53

这个问题似乎来自于各自设备的底层SpeechRecognizer引擎,在本例中是AiAiSpeechRecognition。

AiAiSpeechRecognition是Android System Intelligence包的一部分,该包是Android12的新特性,如LiveCaption等。然而,它似乎(目前)与SpeechRecognizer应用程序接口不兼容。

出于某些原因,将设备升级到Android12很有可能会将默认的SpeechRecognizer应用程序设置为Android系统智能,尽管它不应该这样做。

这可以由设备的用户修复,进入设置>应用程序>默认应用程序>数字助理应用程序>语音输入,并将其更改回“谷歌语音服务”(您可能首先需要通过Play Store更新谷歌语音服务)。一旦完成此操作,Android系统智能将从该设置的选项列表中消失,这表明它从一开始就不打算被选中。

你也可以只为你的应用程序编程来解决这个问题。为此,你需要特别请求谷歌的语音服务作为你的SpeechRecognizer服务:

代码语言:javascript
复制
mSpeechRecognizer = SpeechRecognizer.createSpeechRecognizer(
    mContext,
    new ComponentName(
        "com.google.android.tts",
        "com.google.android.apps.speech.tts.googletts.service.GoogleTTSRecognitionService"
    )
);

请注意,通过这样做,

  1. 您覆盖了上述设置菜单中的用户选择。
  2. 您使您的应用程序依赖于谷歌的语音服务,使其无法在没有语音服务的设备上运行。
  3. 当谷歌重命名其内部服务类时,您的应用程序可能会中断,这些服务类现在是hard-referenced.

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

据我所知,安卓系统智能被选为SpeechRecognizer引擎的事实是安卓12中的一个错误,应该由谷歌来修复。我还没有搜索谷歌的问题跟踪器,也许它应该在那里提交。

票数 1
EN

Stack Overflow用户

发布于 2022-01-01 16:57:39

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

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

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69827554

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档