You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android 11后台启动录屏仅显缩略图无法播放、音频初始化失败问题

核心报错:IAudioFlinger.createRecord返回错误-1,AudioRecord创建录音轨道失败,初始化native AudioRecord对象时报错误码-20,最终MediaAudioEncoder初始化AudioRecord失败。仅Android 11系统复现:应用在返回栈(后台)时启动录屏,系统仅显示屏幕投射选项,无“应用正在使用麦克风”提示,录制生成的视频文件体积极小、仅显示缩略图无法正常播放,其余Android版本无异常。

问题根因

该异常由Android 11(API 30)新增的后台麦克风访问权限强制限制导致,和编码器、屏幕投射权限逻辑无关:

  • Android 11开始,应用未处于前台可见状态时,系统权限层会直接拦截麦克风采集请求,不会触发麦克风使用提示,也不会给应用分配音频输入资源
  • 日志里的createRecord返回-1、native初始化错误码-20(对应AudioRecord.ERROR_INVALID_OPERATION)都是系统权限拦截的标准返回值
  • 音频轨道初始化失败后,媒体复用器只写入了少量视频帧头信息,所以最终输出的文件体积极小,只能显示缩略图无法正常播放
修复方案

按优先级落地以下调整即可解决该问题:

  • 强制录屏启动流程在应用前台状态执行
    不要在Activity退到返回栈、后台Service无界面附着的状态下直接调用startRecording。可以通过ProcessLifecycleOwner监听应用生命周期,仅在应用处于STARTED/RESUMED前台状态时执行录屏启动逻辑;如果是通过通知栏按钮触发录屏,先配置PendingIntent拉起一个透明主题的Activity把应用切到前台,等页面onResume回调后再真正启动录屏和音频采集。已经初始化完成的AudioRecord在应用切后台后可以正常继续采集,不会被系统中断。
  • 补全权限与前台服务配置
    在AndroidManifest.xml中补充对应配置,适配Android 11的服务权限要求:
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
    <!-- Android 11 专属后台麦克风访问权限 -->
    <uses-permission android:name="android.permission.RECORD_BACKGROUND_AUDIO" />
    
    <service
        android:name=".ScreenRecordService"
        android:exported="false"
        android:foregroundServiceType="mediaProjection|microphone" />
    
    注意:非系统签名的第三方应用即便配置了上述权限,在应用完全不可见的后台状态下启动录音,系统依然会弹出权限确认弹窗,无法静默启动采集,因此优先使用前台触发录屏的方案,兼容性覆盖最广。
  • 增加音频初始化失败的降级逻辑
    在MediaAudioEncoder的AudioRecord初始化位置加状态校验,如果初始化失败直接跳过音频轨道录制,不要阻塞视频轨道写入,避免输出损坏的视频文件:
    val minBufferSize = AudioRecord.getMinBufferSize(sampleRate, channelConfig, audioFormat)
    audioRecord = AudioRecord(MediaRecorder.AudioSource.MIC, sampleRate, channelConfig, audioFormat, minBufferSize)
    if (audioRecord?.state != AudioRecord.STATE_INITIALIZED) {
        audioRecord?.release()
        audioRecord = null
        Log.w("MediaAudioEncoder", "AudioRecord init failed, skip audio track")
        return@init
    }
    
验证标准

修复后在Android 11设备上验证满足以下表现即为正常:

  • 应用前台启动录屏时,状态栏正常弹出“应用正在使用麦克风”的系统提示
  • 录屏过程中切后台,音频采集不会中断
  • 录制生成的文件大小和录制时长匹配,音画同步可正常播放

内容的提问来源于stack exchange,提问作者Muhammad Sajid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.02 02:51:30