超简单实现Android(安卓)屏幕截屏(需要系统级权限)
16lz
2021-01-24
1.思路 通过cmd 命令 :adb shell screencap -p /sdcard/screen.png 来实现
2.添加系统签名及权限
android:sharedUserId="android.uid.system"
3.创建 命令工具类:CmdUtil
import android.support.annotation.NonNull;import android.text.TextUtils;import android.util.Log;import java.io.BufferedReader;import java.io.DataOutputStream;import java.io.IOException;import java.io.InputStreamReader;public class CmdUtil { private static final String TAG = "CmdUtil"; private static final String COMMAND_SH = "sh"; private static final String COMMAND_EXIT = "exit\n"; private static final String COMMAND_LINE_END = "\n"; /** * 运行命令 * * @param command 命令 * @return 结果 */ public static Result execute(String command) { Log.i(TAG, "execute() command = " + command); Result result = new Result(); if (TextUtils.isEmpty(command)) { Log.w(TAG, "WARNING: command should not be null or empty"); return result; } Process process = null; DataOutputStream dos = null; try { process = Runtime.getRuntime().exec(COMMAND_SH); dos = new DataOutputStream(process.getOutputStream()); dos.write(command.trim().getBytes()); dos.writeBytes(COMMAND_LINE_END); dos.flush(); dos.writeBytes(COMMAND_EXIT); dos.flush(); result.code = process.waitFor(); result.success = readBuffer(new BufferedReader(new InputStreamReader(process.getInputStream()))); result.error = readBuffer(new BufferedReader(new InputStreamReader(process.getErrorStream()))); Log.i(TAG, "result = " + result); } catch (IOException ioe) { ioe.printStackTrace(); Log.e(TAG, ioe.getMessage()); } catch (InterruptedException ie) { ie.printStackTrace(); Log.e(TAG, ie.getMessage()); } finally { try { if (null != dos) { dos.close(); } } catch (IOException ioe) { ioe.printStackTrace(); Log.e(TAG, ioe.getMessage()); } if (null != process) { process.destroy(); } } return result; } @NonNull private static String readBuffer(BufferedReader bufferedReader) throws IOException { StringBuilder sb = new StringBuilder(); String s; while ((s = bufferedReader.readLine()) != null) { sb.append(s); } return sb.toString(); } /** * Command执行结果 */ public static final class Result { public static final int SUCCESS = 0; public static final int ERROR = -1; public int code = ERROR; String error; String success; @Override public String toString() { return "Result{" + "code=" + code + ", error='" + error + '\'' + ", success='" + success + '\'' + '}'; } }}
4.简单实现
CmdUtil.execute(" screencap -p /data/screen1.png");
5.导出查看即可(或者指定其他路径)
adb pull /data/screen1.png ./
另附上两个很好的截屏demo:
参考Google官方给的demo以及其他开发者写的Demo
https://github.com/googlesamples/android-ScreenCapture
https://github.com/VincentWYJ/CaptureScreen
更多相关文章
- android 调用系统打电话和发短,懒得记
- windows 使用QUME跑Android系统
- 如何搭建android环境---windows系统环境里。
- Android(安卓)DropboxManager介绍
- Android电源管理之一:基础概览
- Android通过使用系统广播监听网络状态的改变
- Ubuntu 10.10下Eclipse+ADT(Android)开发环境搭建
- Android(安卓)里面的android_secret_code
- Android加载网络图片并保存到系统相册