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);
截取應用(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);
2. 應用內的禁止截屏
APP的某些界面如果不希望用戶能夠截屏,可以對當前當前的Activity設置一個安全標記,如下:
// 禁止截屏 activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);
設置該安全標記后,在該Activity界面,無論是系統截屏,還是adb命令獲取截屏,都將無法使用(有root權限的不正常情況除外)。
