1. 程式人生 > >Android工具之實現截圖和禁止截圖

Android工具之實現截圖和禁止截圖

轉載地址:http://blog.csdn.net/xietansheng/article/details/52689384;

1. 應用內的程式碼截圖(獲取View的快照)

Android的View類中提供了獲取控制元件繪製快取的方法,這種截圖的方式僅限於應用內自己的Activity介面,不需要任何許可權,嚴格來說該方法不屬於截圖,只是獲取某個View控制元件每次繪製後的快照,程式碼如下:

擷取某一個控制元件繪製後的快照:

// 獲取需要擷取快照的控制元件
View view = findViewById(R.id.my_view);

// 設定控制元件允許繪製快取
view.setDrawingCacheEnabled(true
); // 獲取控制元件的繪製快取(快照) Bitmap bitmap = view.getDrawingCache(); // 儲存擷取的快照 bitmap.compress(Bitmap.CompressFormat.PNG, 100, fileOutputStream);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

擷取應用(Activity)的整個螢幕:

/*
 * 每個Activity都有一個鋪滿全屏的頂層View,只需要獲取這個View的繪製快照,
 * 就相當於截取了整個Activity的螢幕,這種方式擷取部分包括通知欄,但不包括
 * 通知爛上的內容,因為其內容不屬於當前的Activity。
 */

// 獲取Activity整個視窗最頂層的View
View view = activity.getWindow().getDecorView(); // 設定控制元件允許繪製快取 view.setDrawingCacheEnabled(true); // 獲取控制元件的繪製快取(快照) Bitmap bitmap = view.getDrawingCache(); // 儲存擷取的快照 bitmap.compress(Bitmap.CompressFormat.PNG, 100, fileOutputStream);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

2. 應用內的禁止截圖

APP的某些介面如果不希望使用者能夠截圖,可以對當前當前的Activity設定一個安全標記,如下:

// 禁止截圖
activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);
  • 1
  • 2

設定該安全標記後,在該Activity介面,無論是系統截圖,還是adb命令獲取截圖,都將無法使用(有root許可權的不正常情況除外)。