Android Studio下安卓与iOS应用禁用截屏、录屏实现方法
双端防截屏/录屏内容防护实现方案
针对应用内容安全防护的两类核心目标——直接禁用用户端的截屏、录屏触发能力,或者让用户通过截屏、录屏获取到的应用画面为空白无效内容,Android、iOS双端可直接落地的实现方式具体如下:
Android端(基于Android Studio开发场景)
- 系统层直接拦截截屏、录屏能力
给需要防护的页面窗口添加安全标志WindowManager.LayoutParams.FLAG_SECURE即可实现:调用getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE)设置后,系统会直接拦截该页面的截屏触发动作,同时在录屏场景下自动将该窗口的捕获内容替换为黑屏,不会暴露真实界面。
实际开发建议把这个flag的设置逻辑统一抽到所有页面的基类BaseActivity的onCreate方法中,避免遗漏启动页、弹窗、WebView承载的内容页等零散页面,导致防护出现漏洞。 - 敏感页面按需触发防护逻辑
如果不需要全局开启防护,可以针对核心敏感页面做定向检测:- 截屏检测:通过自定义ContentObserver监听系统媒体库的文件变更,一旦检测到用户刚生成截图文件,立刻将当前页面的敏感内容临时替换为空白提示,避免用户留存有效截图;
- 录屏检测:Android 12及以上版本可通过
DisplayManager注册显示状态回调,一旦检测到外部内容投射(即录屏/投屏状态),立刻触发页面内容降级,清空所有关键信息展示。
iOS端
- 录屏/投屏场景下实现空白输出
iOS没有和Android端FLAG_SECURE完全对等的、可以直接禁用截屏/录屏的系统API,但可以通过状态检测实现让用户截取、录制到的画面全为空白的效果:
核心逻辑是将真实业务内容View和页面展示层做隔离,当检测到系统处于截屏/录屏状态时,临时移除真实内容View,替换为完全空白的占位View,待状态恢复后再切回真实内容:- 录屏/投屏状态检测:iOS 10及以上版本可通过系统属性
UIScreen.isCaptured判断当前是否处于录屏、AirPlay投屏、外部视频输出状态,属性值为true时立刻触发页面内容替换; - 截屏行为检测:监听系统通知
UIApplication.userDidTakeScreenshotNotification,一旦收到用户完成截屏的系统通知,立刻临时覆盖全局空白遮罩,同时清空页面的敏感缓存,避免截图留存有效信息。
- 录屏/投屏状态检测:iOS 10及以上版本可通过系统属性
- 多任务场景防护补全
iOS系统在应用切换到后台时,会自动抓取当前页面的画面生成多任务切换的缩略图,需要在应用进入后台的生命周期回调applicationDidEnterBackground中,立刻给页面添加空白遮罩,避免用户在多任务界面看到甚至截取到应用的真实内容。
注意:以上方案均为系统官方提供的能力,不需要申请特殊第三方权限,符合应用商店审核规则;但这类方案仅能覆盖系统层面的截屏、录屏、投屏操作,无法防范用户使用外部实体设备(如另一台手机正对屏幕拍摄)带来的内容泄露风险。
内容的提问来源于stack exchange,提问作者Xeno
相关产品推荐
相关产品推荐

