1

如果在 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

提前致谢。

4

0 回答 0