当前位置: 首页 > article >正文

[Android]从FLAG_SECURE禁止截屏看surface

在应用中,设置activity的flag为FLAG_SECURE就可以禁止截屏,截屏出来是黑色的,

试验一下,

注意事项

  1. 影响

    • 设置 FLAG_SECURE 标志后,用户将无法对该Activity进行截屏或录制屏幕。
    • 这个标志会影响所有屏幕录制工具,不仅仅是截屏工具。
  2. 适用场景

    • 这个标志适用于需要保护敏感信息的场景,例如银行应用、支付应用等。
  3. 用户体验

    • 用户可能会注意到屏幕录制或截屏功能被禁用,因此在使用这个标志时,最好在应用中提供相应的提示或说明。

完整示例

以下是一个完整的示例,展示了如何在一个简单的Android应用中禁止截屏。

activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="16dp">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="This screen cannot be captured or recorded."
        android:textSize="18sp"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="20dp"/>
</LinearLayout>
MainActivity.java
package com.example.noscreenshot;

import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    protected void onResume() {
        super.onResume();
        // 设置 FLAG_SECURE 标志来禁止截屏
        getWindow().addFlags(android.view.WindowManager.LayoutParams.FLAG_SECURE);
    }

    @Override
    protected void onPause() {
        super.onPause();
        // 可选:在不需要禁止截屏时移除 FLAG_SECURE 标志
        // getWindow().clearFlags(android.view.WindowManager.LayoutParams.FLAG_SECURE);
    }
}

可以发现,不能截屏了,使用screencap命令也不能截屏,再试验一下scrcpy工具

(https://github.com/Genymobile/scrcpy/releases)

这个和录屏类似,也是黑色的,但是其他的surface是可以看到的,使用分屏显示其他应用,

scrcpy的录屏是创建了一个display,这里可以猜测,系统中(surfaceflinger)对新创建的这个display也进行了surface的合成,而不是画面的复制。


http://www.kler.cn/a/379009.html

相关文章:

  • C语言数据库探索:适合初学者,探索C语言如何与数据库交互
  • 1、Qt6 Quick 简介
  • CODESYS可视化星三角降压启动程序控制电气动画图
  • Jest进阶知识:React组件的单元测试
  • django的models使用介绍。
  • C++ 编程基础(4)函数 | 4.1、函数概述
  • 雷电模拟器ls内部操作adb官方方法
  • VScode + PlatformIO 了解
  • WMV怎么转MP4?五个简单好用的视频格式转换方法!
  • Faces in Things数据集: 由麻省理工学院、微软等联合发布,探索人类视觉错觉的新里程碑
  • 每日OJ题_牛客_最长上升子序列(二)_贪心+二分_C++_Java
  • 做一个能适配「手机」的网站需要注意什么
  • 匹配——rabin_karp是怎么滚动的?
  • 多波束T50P和SES2000 Medium100安装记录(2024年10月)
  • Android 斗鱼面经
  • flutter 打包
  • 2024年华为OD机试真题-VLAN资源池-Java-OD统一考试(E卷)
  • 存在sql注入的公网站点
  • selenium无头浏览器截图并以邮件发送
  • C++学习笔记----10、模块、头文件及各种主题(一)---- 模块(1)
  • 网络安全法详细介绍——爬虫教程
  • 华为设备配置端口隔离实验
  • FreeRTOS 中的列表与列表项详解
  • java基础day08
  • 数据结构,问题 B: 反向输出
  • 探索智能投顾:正大金融数据分析如何优化市场策略