Android之禁止APP截图、录屏

本文介绍如何在安卓APP开发中使用FLAG_SECURE属性,防止当前页面被系统截屏和录制,保护用户隐私和版权内容。只需在Activity中加入一行代码即可实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为了安卓APP的安全,特殊需求时设置当前页面禁止系统截屏、录制,例如开发漫画APP。

代码:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);
        initView();
    }

只需要增加一行:

getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);

其中属性FLAG_SECURE:

该属性能防止屏幕被截图和录制。这个属性就是可以防止当前Activity不会被录制。 

通过反编译程序在Smali文件中找到这段代码:

其中0x2000就是WindowManager.LayoutParams.FLAG_SECURE。

有人说,在Smali文件中找到这段代码删除掉,就可以任意进行手机截屏,我没试过。

### 如何在 UniApp 中实现禁止截屏功能 #### 方法一:通过 `app.vue` 文件全局禁用 可以在项目的根组件 `app.vue` 中设置,在应用启动时调用接口来禁用截屏的功能。具体做法是在 `<script>` 部分定义一个函数用于配置幕捕获权限,并利用生命周期钩子 `onMounted()` 来执行该操作。 ```javascript import { onMounted } from 'vue'; export default { setup() { const restrictScreenshot = () => { uni.setUserCaptureScreen({ enable: false, success(res) { console.log('全局截屏功能已禁用'); }, fail(err) { console.error('全局禁用截屏功能失败', err); } }); }; onMounted(() => { restrictScreenshot(); }); return {}; } } ``` 此方式适用于希望一次性为整个应用程序设定统一行为的情况[^1]。 #### 方法二:针对 Android 设备特定处理 对于仅需对安卓平台生效的情形,可在 HTML 页面加载完成后监听 `plusready` 事件,之后判断操作系统名称并作出相应调整: ```html <script type="text/javascript"> document.addEventListener('plusready', function(){ let osname = plus.os.name; if(osname === "Android"){ var activity = plus.android.runtimeMainActivity(); plus.android.invoke( plus.android.invoke(activity,"getWindow"), "addFlags", 0x00002000 // FLAG_SECURE flag to prevent screenshotting ); } }); </script> ``` 上述代码片段展示了如何向窗口对象添加安全标志位以阻止截图动作的发生[^3]。 这两种方案都可以有效地防止用户意外或故意保存界面图像资料的行为,开发者可以根据实际需求选择合适的方式实施保护措施。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值