Android Q(10.0)从其他应用捕获该应用的音频 中文文档

播放捕捉

Android Q包含一个新的AudioPlaybackCapture API。此API使应用程序能够复制其他应用程序正在播放的音频。此功能是屏幕捕获的模拟,但适用于音频。主要用例是用于想要捕获游戏正在播放的音频的流媒体应用。

请注意,捕获API不会影响正在捕获其音频的应用的延迟。

 

构建捕获应用程序

先决条件

 

为了安全和隐私,播放捕获带来了一些限制。为了能够捕获音频,应用必须满足以下要求:

  • 该应用必须拥有该 RECORD_AUDIO 权限。
  • 应用程序必须显示显示的提示 MediaProjectionManager.createScreenCaptureIntent(),并且用户必须批准它。
  • 捕获和播放应用必须位于相同的用户配置文件中。

 

捕获音频

 

要从其他应用程序捕获音频,您的应用程序必须构建一个 AudioRecord对象并添加一个对象AudioPlaybackCaptureConfiguration 。跟着这些步骤:

  1. 打电话AudioPlaybackCaptureConfiguration.Builder.build() 来建立一个AudioPlaybackCaptureConfiguration
  2. AudioRecord通过调用将配置传递给 setAudioPlaybackCaptureConfig

 

通过音频内容限制捕获

 

应用可以使用以下方法限制它可以捕获的音频:

  • 传递AUDIO_USAGE给 AudioPlaybackCaptureConfiguration.addMatchingUsage() 以允许捕获特定用法。多次调用该方法以指定多个用法。
  • 传递AUDIO_USAGE给AudioPlaybackCaptureConfiguration.excludeUsage()以禁止捕获该用法。多次调用该方法以指定多个用法。
  • 将UID传递给AudioPlaybackCaptureConfiguration.addMatchingUid() 以仅捕获具有特定UID的应用程序。多次调用该方法以指定多个UID。
  • 将UID传递给AudioPlaybackCaptureConfiguration.excludeUid() 以禁止捕获该UID。多次调用该方法以指定多个UID。

请注意,您不能同时使用addMatchingUsage()excludeUsage()方法。你必须选择其中一个。同样的,你不能使用addMatchingUid(),并excludeUid() 在同一时间。

 

允许播放捕获

 

您可以配置应用以防止其他应用捕获其音频。只有当应用满足以下要求时,才能捕获来自应用的音频:

 

用法

 

产生音频玩家必须设置它的使用 到USAGE_MEDIA, USAGE_GAME或者 USAGE_UNKNOWN

 

捕获政策

 

玩家的捕获策略必须是 AudioAttributes.ALLOW_CAPTURE_BY_ALL,允许其他应用程序捕获回放。这可以通过多种方式完成:

  • 要在所有玩家上启用捕获,请包含 android:allowAudioPlaybackCapture="true"在应用程序的 manifest.xml文件中。
  • 您还可以通过致电在所有玩家上启用捕获AudioManager.setAllowedCapturePolicy(AudioAttributes.ALLOW_CAPTURE_BY_ALL)
  • 您可以在使用时为单个播放器设置策略AudioAttributes.Builder.setAllowedCapturePolicy(AudioAttributes.ALLOW_CAPTURE_BY_ALL)。(如果您正在使用AAudio电话AAudioStreamBuilder_setAllowedCapturePolicy(AAUDIO_ALLOW_CAPTURE_BY_ALL)。)

如果满足这些先决条件,则可以捕获播放器产生的任何音频。

注意:应用程序音频的捕获能力也取决于应用程序targetSdkVersion

  • 默认情况下,针对Android 9.0版本(包括Android版本)的应用程序不允许回放捕获。要启用它,请包含android:allowAudioPlaybackCapture="true"在应用程序的manifest.xml文件中。
  • 默认情况下,定位Android Q或更高版本的应用会允许捕获其音频。要禁用播放捕获,请包含android:allowAudioPlaybackCapture="false"在应用程序的manifest.xml文件中。

 

禁用系统捕获

 

允许上述捕获的保护仅适用于应用程序。Android系统组件忽略这些约束,并且可以默认捕获回放。其中许多组件都是由Android供应商定制的,并支持可访问性和字幕等功能。因此,建议应用程序允许系统捕获其播放。在极少数情况下,当您不希望系统捕获应用程序的播放时,请将捕获策略设置为 ALLOW_CAPTURE_BY_NONE

 

在运行时设置策略

 

您可以AudioManager.setAllowedCapturePolicy()在应用程序运行时调用更改捕获策略。如果在调用方法时正在播放MediaPlayer或AudioTrack,则音频不受影响。您必须关闭并重新打开播放器或跟踪以使策略更改生效。

 

Policy = manifest + AudioManager + AudioAttributes

 

由于可以在多个地方指定捕获策略,因此了解如何确定有效策略非常重要。始终应用限制性最强的捕获策略。例如,其清单包含的应用程序setAllowedCapturePolicy="false"将永远不允许非系统应用程序捕获其音频,即使AudioManager#setAllowedCapturePolicy设置为ALLOW_CAPTURE_BY_ALL。同样,如果AudioManager#setAllowedCapturePolicy设置为ALLOW_CAPTURE_BY_ALL和清单设置setAllowedCapturePolicy="true",但媒体播放器 AudioAttributes是使用AudioAttributes.Builder#setAllowedCapturePolicy(ALLOW_CAPTURE_BY_SYSTEM),则此媒体播放器将无法被非系统应用程序捕获。

 

下表总结了清单属性和有效策略的效果:

allowAudioPlaybackCapture ALLOW_CAPTURE_BY_ALL ALLOW_CAPTURE_BY_SYSTEM ALLOW_CAPTURE_BY_NONE
任何应用程序 系统 没有捕获
系统 系统 没有捕获

你可能感兴趣的:(Android,Q)