Android 设置禁止截图和禁止长截图
1.禁止截图
在 Activity 代码中 , 可以在调用 setContentView 函数之前 ,为 Window 窗口对象 设置 LayoutParams.FLAG_SECURE 标志位 , 可以禁止对本界面进行截屏 ,Window 窗口对象 , 可通过 getWindow 方法获取 ,核心代码如下 :getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
2.禁止长截图
android:supportsPictureInPicture="false"
【错误记录】Android 应用漏洞修复处理 ( 截屏攻击漏洞 | Android 系统的截屏方式 | 通过 adb 命令截屏 |Android 截屏代码 | Android 设置禁止屏幕截屏代码 )_android 禁止截屏-CSDN博客
import android.app.Activity;
import android.graphics.Bitmap;
import android.os.Environment;
import android.view.View;import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;public class ScreenshotUtils {// 截屏并保存到指定文件public static void takeScreenshot(Activity activity) {// 获取屏幕内容的视图View rootView = activity.getWindow().getDecorView().getRootView();// 创建一个空的Bitmap,大小为屏幕的宽高Bitmap screenshotBitmap = Bitmap.createBitmap(rootView.getWidth(), rootView.getHeight(), Bitmap.Config.ARGB_8888);// 将屏幕内容绘制到Bitmap上rootView.draw(new Canvas(screenshotBitmap));// 保存Bitmap到文件saveBitmapToFile(screenshotBitmap, "screenshot.png");}// 将Bitmap保存到文件private static void saveBitmapToFile(Bitmap bitmap, String fileName) {// 获取外部存储的公共目录File directory = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);// 创建存储文件的目录File screenshotFile = new File(directory, fileName);FileOutputStream fos = null;try {fos = new FileOutputStream(screenshotFile);// 将Bitmap压缩为PNG格式并写入文件bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);// 刷新文件输出流fos.flush();// 在此可以发送广播通知系统相册更新// MediaScannerConnection.scanFile(context, new String[]{screenshotFile.getAbsolutePath()}, null, null);} catch (IOException e) {e.printStackTrace();} finally {if (fos != null) {try {fos.close();} catch (IOException e) {e.printStackTrace();}}}}
}