[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的合成,而不是画面的复制。

相关推荐
alexhilton15 小时前
务实的模块化:连接模块(wiring modules)的妙用
android·kotlin·android jetpack
ji_shuke15 小时前
opencv-mobile 和 ncnn-android 环境配置
android·前端·javascript·人工智能·opencv
sunnyday042617 小时前
Spring Boot 项目中使用 Dynamic Datasource 实现多数据源管理
android·spring boot·后端
幽络源小助理19 小时前
下载安装AndroidStudio配置Gradle运行第一个kotlin程序
android·开发语言·kotlin
inBuilder低代码平台19 小时前
浅谈安卓Webview从初级到高级应用
android·java·webview
豌豆学姐19 小时前
Sora2 短剧视频创作中如何保持人物一致性?角色创建接口教程
android·java·aigc·php·音视频·uniapp
白熊小北极19 小时前
Android Jetpack Compose折叠屏感知与适配
android
HelloBan19 小时前
setHintTextColor不生效
android
洞窝技术21 小时前
从0到30+:智能家居配网协议融合的实战与思考
android
QING6181 天前
SupervisorJob子协程异常处理机制 —— 新手指南
android·kotlin·android jetpack