【问题标题】:Audio capture permission for an Android system appAndroid系统应用的音频采集权限
【发布时间】:2021-09-07 05:35:00
【问题描述】:

我能够使用 Android 播放捕获 API 创建一个系统应用来捕获 Android 10 系统中其他应用的音频。但是,它无法捕获目标 SDK 为 28 的某些应用程序的声音(一旦我将这些应用程序升级到目标 SDK 29,它将起作用)。

这令人费解,因为根据 Android official documentthis blog,系统应用程序默认情况下应该能够捕获其他应用程序的声音,除非它被应用程序故意禁止(不是我的情况)。

【问题讨论】:

  • 问题是什么?如果任何应用程序限制录制其音频并且那是系统策略,那么您将听不到此应用程序,因为您不应该为此目的排除此应用程序,系统不会让您录制此源
  • 为了澄清我的问题,我的系统应用程序,比如在 SDK 29 中运行的 Alpha,据说可以记录另一个应用程序,比如 Beta,因为 Beta 在其清单中没有任何限制。但实际上,只有在Beta 29 也有目标SDK 的情况下,Alpha 才能录制Beta 的音频。如果 Beta 保持在 28 的目标 SDK 中,我只会得到无声音频,并且 logcat 输出中没有任何相关错误。顺便说一句,Alpha 使用系统 UID 运行,并且位于系统文件夹 /system/app 中,所以我认为它具有正确的优先级。

标签: android audio


【解决方案1】:

嗯,链接文档中有一个注释(在 THIS paragraph 中),它描述了这种行为

注意:捕获应用音频的能力还取决于应用的 targetSdkVersion。

默认情况下,面向 Android 9.0 及以下版本的应用不允许播放捕获。要启用它,请在应用的 manifest.xml 文件中包含 android:allowAudioPlaybackCapture="true"。

默认情况下,面向 Android 10(API 级别 29)或更高版本的应用允许捕获其音频。要禁用播放捕获,请在应用的 manifest.xml 文件中包含 android:allowAudioPlaybackCapture="false"。

【讨论】:

  • 是的,我确实读过这篇笔记,但我的理解是它仅适用于非系统应用程序。就我而言,我的音频捕获应用是一个系统应用。
  • 我认为这有点不安全......当 API29 被引入时,大多数应用程序还不支持它(没有标志),其中一些可能会播放一些“私人音频”。系统不会知道隐私级别,因此它会关闭所有未声明的应用程序以防万一。而“声明”可以理解为代码中allowAudioPlaybackCapture标志的引入或针对变更(开发者应阅读变更日志并调整一些应用属性和代码,包括上述标志)
  • 此外,一些开发人员可能会认为他们的音频数据非常敏感,以至于任何应用程序都不应该对其进行录制,此外开发人员知道生根并将一些自定义/自己的录音应用程序作为系统一员跨度>
  • 谢谢,@snachmsm。你说的对我来说很有道理。另一方面,我原帖中引用的官方文档和博客页面似乎另有说明。我需要深入挖掘。
  • 记得告诉我们,找到确认后发布答案:) 祝你好运!
【解决方案2】:

感谢我同事的帮助,我的应用在我之后运行了

  1. 将系统应用升级为特权应用以获得 CAPTURE_MEDIA_OUTPUT 权限
  2. 设置私有字段mAllowPrivilegedPlaybackCapture 在 AudioMixingRule 对象中设置为“true”。

上面的 #2 是在我上次失败的尝试中躲避我的关键。

【讨论】:

  • 能否请您详细说明解决方案。我遇到了一个类似的问题,我想捕获 chrome 应用程序音频。
猜你喜欢
  • 2015-08-17
  • 2016-09-04
  • 1970-01-01
  • 1970-01-01
  • 2011-02-02
  • 2013-06-17
  • 2015-12-16
  • 1970-01-01
相关资源
最近更新 更多