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
相关产品推荐
相关产品推荐

