如果在 AndroidManifest.xml 中设置了 android:sharedUserId,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.speechrecognizerapp"
android:sharedUserId="com.example.speechrecognizerapp">
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<queries>
<intent>
<action android:name="android.speech.RecognitionService" />
</intent>
</queries>
...
SpeechRecognizer 在 Android 11(API 级别 30)上不起作用,因为 RecognitionListener.onError 回调将返回 5 (SpeechRecognizer.ERROR_CLIENT)。
如果您检查 logcat,它表明我们不允许执行 RECORD_AUDIO:
12-22 10:49:49.503 1278 2519 E AppOps : noteOperation
12-22 10:49:49.503 1278 2519 E AppOps : java.lang.SecurityException: Specified package com.example.speechrecognizerapp:10451 under uid 10451 but it is really -1
...
12-22 10:49:49.506 5495 5868 W A : Caused by: java.lang.SecurityException: Proxy package com.google.android.googlequicksearchbox from uid 10243 or calling package com.example.speechrecognizerapp:10451 from uid 10451 not allowed to perform RECORD_AUDIO
12-22 10:49:49.506 5495 5868 W A : at android.app.AppOpsManager.noteProxyOp(AppOpsManager.java:7599)
12-22 10:49:49.506 5495 5868 W A : at android.app.AppOpsManager.noteProxyOp(AppOpsManager.java:7626)
12-22 10:49:49.506 5495 5868 W A : at com.google.android.apps.search.transcription.f.at.p(SourceFile:12)
12-22 10:49:49.506 5495 5868 W A : at com.google.android.apps.search.transcription.f.at.j(SourceFile:2)
12-22 10:49:49.506 5495 5868 W A : at com.google.android.apps.search.transcription.f.bl.fI(Unknown Source:2)
12-22 10:49:49.506 5495 5868 W A : at com.google.apps.tiktok.tracing.ct.fI(SourceFile:2)
12-22 10:49:49.506 5495 5868 W A : at com.google.common.x.a.f.f(Unknown Source:2)
12-22 10:49:49.506 5495 5868 W A : at com.google.common.x.a.h.run(SourceFile:9)
12-22 10:49:49.506 5495 5868 W A : ... 5 more
...
12-22 10:49:49.509 15452 15452 E SpeechRecognizerApp: onError: 5
但是 SpeechRecognizer 在删除 sharedUserId 并重新安装应用程序后确实有效。如您所知,您无法从应用市场将具有 sharedUserId 的 App 升级到没有 sharedUserId 的较新版本,因此我不知道如何正确解决此问题。请帮帮我。
测试源码: https ://github.com/youjhihchao/SpeechRecognizerApp
提前致谢。