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();}}}}
}