android - 面向 Android 11 时 SpeechRecognizer 不可用
问题描述
在将 targetLevel 增加到 30 后测试应用程序时,我发现 SpeechRecognizer不再可用,即SpeechRecognizer.isRecognitionAvailable()
始终返回 false。
如果我将 targetLevel 设置回 29,而不更改任何其他内容,它就会再次可用。这发生在真实设备(Pixel 3a)和模拟器上。
这似乎不是行为改变。识别器 API 提到的唯一要求是Manifest.permission.RECORD_AUDIO
我在 logcat 中也没有发现任何线索。
解决方案
我终于找到了解决方案。
尝试实际使用(据称不可用)识别器会导致 logcat 中出现此消息:
10-13 09:19:50.273 1531 1799 I AppsFilter: interaction: PackageSetting{eb6a1b2 my.application.package/10225} -> PackageSetting{ab34503 com.google.android.googlequicksearchbox/10140} BLOCKED
10-13 09:19:50.273 1531 1799 W ActivityManager: Unable to start service Intent { act=android.speech.RecognitionService cmp=com.google.android.googlequicksearchbox/com.google.android.voicesearch.serviceapi.GoogleRecognitionService } U=0: not found
10-13 09:19:50.273 25348 25348 E SpeechRecognizer: bind to recognition service failed
所以问题似乎与这个新的 Android 11“功能”有关,解决方案是在清单中添加一个查询以获取被阻止的意图:
<manifest ...>
<queries>
<intent>
<action android:name="android.speech.RecognitionService" />
</intent>
</queries>
推荐阅读
- javascript - 在网页上,所有文本框都有相同的 ID,我想通过 Chrome 控制台中的 JavaScript 在所有框中写入相同的文本
- c# - 如果嵌套数组应具有不同的 json 元素,如何使用 C#(.net Core)将嵌套的 Json 存储到 MongoDB
- javascript - 排序最新日期时间
- python - 熊猫日期时间排序自动删除时间戳
- python - 将余弦平方拟合到python中的点
- angular - CDK 无限滚动结束检查
- android - 我在哪里可以找到 AAR 中的 Proguard 规则?
- android - SQLite、MongoDB 和 React-Native 的组合可能吗?
- ruby - col 如何在 Ruby 代码中获取其值:Array.new(cells) { |col| PolarCell.new(行,列)}
- visual-studio-code - Visual Studio Code 等待和弦的第二个键。(Ctrl + A)