Android系统应用使用playback capture API无法捕获target SDK 28应用音频问题
问题根因
你遇到的是Android 10(API 29)playback capture API对低版本target SDK应用的默认策略差异问题,具体平台规则如下:
- targetSdkVersion ≥ 29的应用:音频播放捕获权限默认处于允许状态,仅当应用在
AndroidManifest.xml中显式配置android:allowAudioPlaybackCapture="false"时,才会禁止其他应用捕获自身音频 - targetSdkVersion ≤ 28的应用:音频播放捕获权限默认处于禁止状态,必须在应用
AndroidManifest.xml中显式配置android:allowAudioPlaybackCapture="true",才允许其他应用捕获自身音频
这也能解释你将目标应用target SDK升级到29后就能正常采集的现象:升级后目标应用触发了高版本SDK的默认允许规则,无需额外配置就放开了音频采集权限。
解决方案
方案1(修改目标应用配置)
如果可以调整目标应用的代码,不需要升级targetSdkVersion也能解决问题,只需要在目标应用Manifest的application节点下添加如下配置即可:
<application ... android:allowAudioPlaybackCapture="true"> ... </application>
方案2(系统层修改,仅适用于ROM定制场景)
如果目标应用是无法修改的第三方应用,作为系统应用开发者你可以修改framework层的音频捕获权限判定逻辑,强制对所有targetSdk<29的应用放开捕获权限,该方案需要你拥有系统ROM的编译定制权限。
内容的提问来源于stack exchange,提问作者HZhang
相关产品推荐
相关产品推荐

