Android螢幕截圖方式總結
0、Android螢幕截圖方式:
- 藉助PC端工具截圖
- Android手機端截圖
1、藉助PC端工具截圖
PC端截圖可用的工具非常之多,從Android SDK提供的adb、ddms工具,到各大第三方助手應用寶、刷機精靈、豌豆莢等等。
工具雖多,但這些它們的實現方式基本都是一樣的,通過執行 adb shell screencap -p xxx.png
或 adb
shell screenshot xxx.png
來獲取螢幕截圖。
* screencap和screenshot有什麼區別呢?
screencap是從Android 2.3開始提供的一個系統級的截圖工具,通過原始碼可以瞭解到screencap的實現方式,預設會從底層UI Surface去獲取螢幕截圖,如果失敗則從linux kernel層的display framebuffer(`/dev/graphics/fb0`)去獲取螢幕截圖。
screenshot是從Android 4.0開始提供的另一個截圖的工具, 通過原始碼可以發現screenshot則是直接讀取`/dev/graphics/fb0`去獲取螢幕的影象資料。
* 什麼是/dev/graphics/fb0
?
簡單來說是linux kernel 2.x開始提供的,一個螢幕資料快取的裝置,理論上凡是使用linux核心的系統都會有這樣一個東東,然後就可以通過讀取裡面的資料來獲取當前螢幕顯示的內容。需要詳細瞭解可以自行谷歌一下。
小結一下:
PC端如何截圖?
1.下載應用寶PC版等工具
2.安裝Android SDK,使用以下命令:
- 系統是Android 2.3以上:
adb shell screencap -p xxx.png
- 系統是Android 4.0以上:
adb shell screenshot xxx.png
-
系統是Android 2.3以下,腫麼辦?
1.將screenshot工具從Android原始碼中摳出來,編譯為獨立的工具。然後再通過screenshot進行截圖。
2.使用我們沈大雄vincentshen同學開發的gsnapcap截圖工具,已適配各大廠商各種奇葩機型,解決什麼紅屏花屏不在話下,還支援影象壓縮噢。
2、Android手機端截圖
Android手機端截圖分兩種情況,有root許可權和無root許可權。
2.1 有root許可權
在系統已經root的情況下,可以通過在APP程式碼中執行`screencap -p xxx.png` 和 `screenshot xxx.png`來進行螢幕截圖。原理和上述PC端截圖是一樣的,只不過在PC端截圖,手機無需root許可權。如果在APP中執行截圖命令,則需要root許可權。
*任何在adb中可執行的命令,如果想在APP程式碼中執行,基本上都需要有root許可權。例如bugreport、logcat(>=4.1)、screenrecord(>=4.4)等。
程式碼示例:
通過screncap
命令截圖
Process process = null;
try{
process = Runtime.getRuntime().exec("su");
PrintStream outputStream = null;
try {
outputStream = new PrintStream(new BufferedOutputStream(process.getOutputStream(), 8192));
outputStream.println("screencap -p " + filePath);
outputStream.flush();
}catch(Exception e){
Log.e(TAG, e);
} finally {
if (outputStream != null) {
outputStream.close();
}
}
process.waitFor();
}catch(Exception e){
Log.e(TAG, e);
}finally {
if(process != null){
process.destroy();
}
}
通過screnshot
命令截圖和上面是類似的,另外還可以通過呼叫Bugly自研的gsnapcap工具來進行截圖。
chmod 777 /dev/graphics/fb0
gsnapcap xxx.png /dev/graphics/fb0 1
最後一個引數為影象解析度,1為螢幕原始解析度。
2.2 無root許可權
無root許可權又分兩種:
- 系統自帶截圖
- APP內截圖
2.2.1 系統自帶截圖
系統自帶截圖有兩種情況:
- 同時按住 電源鍵 和 音量下鍵 兩秒鐘
- 同時按住 電源鍵 和 Home鍵 兩秒鐘
機型不同,系統自帶的截圖方式也不同,但基本上都是以上兩種。
2.2.2 APP內截圖
APP內截圖又分兩種:(-_-!我真的不是黑安卓,太多情況了。)
- SurfaceView
- GLSurfaceView
SurfaceView和GLSurfaceView有什麼不同,簡單來說普通應用使用SurfaceView截圖即可。遊戲一般都是通過OpenGL實現的,那麼則需要使用GLSurfaceView的方式進行截圖。
2.2.2.1 SurfaceView
直接上程式碼:
public String takeScreenShot(Activity activity){
String filePath = FileUtils.getInstance().getStorePicFile(activity);
View rootView = activity.getWindow().getDecorView();
rootView.setDrawingCacheEnabled(true);
rootView.buildDrawingCache();
Bitmap bitmap = rootView.getDrawingCache();
File imagePath = new File(filePath);
FileOutputStream fos = null;
try {
fos = new FileOutputStream(imagePath);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
fos.flush();
} catch (Exception e) {
}finally {
try{
fos.close();
bitmap.recycle();
bitmap = null;
}catch(Exception e){
}
rootView.destroyDrawingCache();
rootView.setDrawingCacheEnabled(false);
}
return filePath;
}
takeScreenShot的引數必須為Activity類或其子類,不能是Context,這段程式碼是通過獲取Activity的根節點view,並將其DrawingCache儲存為圖片,從而實現對該介面的截圖。這個方法只能對APP自身的介面有效,出了APP就沒有辦法了。
相關文章
- android 螢幕截圖原始碼Android原始碼
- Android 5.0 螢幕錄製/截圖Android
- 少俠學截圖-C#螢幕捕捉的方式C#
- SPX螢幕截圖軟體
- iOS螢幕截圖的方法iOS
- .NET 視窗/螢幕截圖
- Android獲取當前Activity的螢幕截圖Android
- selenium實現螢幕截圖
- iSnapshot for Mac螢幕截圖工具Mac
- mac蘋果螢幕截圖快捷鍵Mac蘋果
- android截圖方法總結Android
- Python網頁截圖/螢幕截圖/截長圖如何實現?Python網頁
- Android螢幕適配總結和思考Android
- Mac螢幕截圖工具——iSnapshot for MacMac
- Windows 8.1怎麼給螢幕截圖Windows
- Ubuntu螢幕截圖快捷鍵知多少Ubuntu
- Flutter學習 —- 螢幕截圖和高斯模糊Flutter
- Flutter學習 ---- 螢幕截圖和高斯模糊Flutter
- iOS-圖片水印,圖片裁剪和螢幕截圖iOS
- 螢幕截圖工具Snagit 2022 macGitMac
- TechSmith Snagit 2022螢幕截圖工具MITGit
- Snagit 2022 for Mac(螢幕截圖工具)GitMac
- web端螢幕截圖,生成自定義海報!Web
- 直播平臺軟體開發,完整擷取整個螢幕的截圖方式
- win10中怎麼拍攝螢幕截圖 在win10系統中拍攝螢幕截圖的步驟Win10
- CleanShot X:螢幕截圖、錄屏、滾動截圖、標註一個都不少
- 高畫質螢幕截圖工具GrabIt ,體驗不一樣的截圖感受
- 用electron開發了一個螢幕截圖工具
- Snagit 2023 for Mac(螢幕截圖軟體)GitMac
- 最強大的螢幕截圖軟體:Snagit for macGitMac
- Matplotlib 中文使用者指南 8.1 螢幕截圖
- Android 截圖與 WebView 長圖分享經驗總結AndroidWebView
- Android -- 工具類(七):[ScreenUtil] (截圖,獲取螢幕寬高,顯示、隱藏虛擬鍵盤,調節螢幕亮度)Android
- Android三種方式擷取任意介面螢幕Android
- Android 螢幕適配終結者Android
- Flutter 簽字畫板及螢幕或Widget截圖Flutter
- MAC小技巧|Mac螢幕截圖去除視窗陰影Mac
- Movavi Screen Recorder 22 Mac(螢幕錄影截圖軟體)Mac