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

Flutter中如何彻底禁用录屏?同时屏蔽音频录制

Android 10+ 同时禁用屏幕录制与音频录制方案

使用FLAG_SECURE仅能阻止屏幕内容被录制,但无法拦截音频。针对Android 10及以上系统的录屏音频录制问题,可根据系统版本采用以下方案:

1. Android 11+ 直接禁止音频捕获(推荐)

Android 11开始提供系统级API,可直接限制应用音频被任何录制工具(包括录屏)捕获,无需监听状态:

val audioManager = getSystemService(Context.AUDIO_SERVICE) as AudioManager
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
    // 设置应用音频不允许被任何方式捕获
    audioManager.setAllowedCapturePolicy(AudioManager.ALLOW_CAPTURE_NONE)
}

设置后,录屏工具将无法捕获到你的应用音频,同时配合FLAG_SECURE即可实现屏录+音频录制的双重禁止。

2. Android 10 动态检测并控制音频

Android 10没有直接禁止音频捕获的API,需通过监听系统音频录制状态,动态控制应用音频的播放:

步骤1:监听系统录屏状态

使用AudioManager的监听接口,检测系统是否正在进行音频录制(即录屏):

val audioManager = getSystemService(Context.AUDIO_SERVICE) as AudioManager
val recordingListener = AudioManager.OnSystemAudioRecordingChangedListener { isRecordingActive ->
    if (isRecordingActive) {
        // 录屏开始:暂停应用音频或静音
        yourMediaPlayer?.pause()
        // 或针对音乐流静音
        audioManager.setStreamMute(AudioManager.STREAM_MUSIC, true)
    } else {
        // 录屏结束:恢复音频播放
        yourMediaPlayer?.start()
        audioManager.setStreamMute(AudioManager.STREAM_MUSIC, false)
    }
}

// 注册监听
audioManager.registerOnSystemAudioRecordingChangedListener(recordingListener)

步骤2:记得注销监听

在页面销毁时注销监听,避免内存泄漏:

override fun onDestroy() {
    super.onDestroy()
    audioManager.unregisterOnSystemAudioRecordingChangedListener(recordingListener)
}

注意事项

  • 无论采用哪种方案,仍需保持FLAG_SECURE的设置,确保屏幕内容无法被录制。
  • Android 10的方案仅能通过控制应用自身音频来避免被录制,无法阻止系统其他音频的捕获,但可满足应用自身音频不被录屏收录的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 10:00:56