gpt4 book ai didi

java - Android - 如何以编程方式截取屏幕截图

转载 作者:IT老高 更新时间:2023-10-28 23:40:01 26 4
gpt4 key购买 nike

当我的应用程序安装并在后台每 200 毫秒运行时,我需要以编程方式截取 Android 设备或模拟器,并将图像保存在我的计算机中。我已经使用以下代码实现了此过程,并且仅在我的应用程序处于前台时才有效。当我的应用程序在后台时,我也想截屏。以下是我的代码:

public static Bitmap takeScreenshot(Activity activity, int ResourceID) { 
Random r = new Random();
int iterator=r.nextInt();
String mPath = Environment.getExternalStorageDirectory().toString() + "/screenshots/";
View v1 = activity.getWindow().getDecorView().findViewById(ResourceID);
v1.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),
MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
v1.layout(0, 0, v1.getMeasuredWidth(), v1.getMeasuredHeight());
v1.setDrawingCacheEnabled(true);
final Bitmap bitmap = Bitmap.createBitmap(v1.getDrawingCache());
Bitmap resultBitmap = Bitmap.createScaledBitmap(bitmap, 640, 480, false);
v1.setDrawingCacheEnabled(false);
File imageFile = new File(mPath);
imageFile.mkdirs();
imageFile = new File(imageFile+"/"+iterator+"_screenshot.png");
try {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
resultBitmap.compress(CompressFormat.PNG, 100, bos);
byte[] bitmapdata = bos.toByteArray();

//write the bytes in file
FileOutputStream fos = new FileOutputStream(imageFile);
fos.write(bitmapdata);
fos.flush();
fos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return bitmap;
}

如何以编程方式在 Devices -> DDMS 中实现 Screencapture 的 Refresh 和 Save 按钮的功能?我能做到吗?

最佳答案

如果你的手机已经root了试试这个

Process sh = Runtime.getRuntime().exec("su", null,null);

OutputStream os = sh.getOutputStream();
os.write(("/system/bin/screencap -p " + "/sdcard/img.png").getBytes("ASCII"));
os.flush();

os.close();
sh.waitFor();

然后将img.png读取为位图并将其转换为jpg如下

Bitmap screen = BitmapFactory.decodeFile(Environment.getExternalStorageDirectory()+         
File.separator +"img.png");

//my code for saving
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
screen.compress(Bitmap.CompressFormat.JPEG, 15, bytes);

//you can create a new file name "test.jpg" in sdcard folder.

File f = new File(Environment.getExternalStorageDirectory()+ File.separator + "test.jpg");
f.createNewFile();
//write the bytes in file
FileOutputStream fo = new FileOutputStream(f);
fo.write(bytes.toByteArray());
// remember close de FileOutput

fo.close();

如果您的应用程序在后台,除非您是 root,否则您无法访问屏幕,即使您在后台,上面的代码也可以最有效地截取任何屏幕。

更新

谷歌有一个库,你可以用它在不root的情况下截图,我试过了,但我相信它会尽快耗尽内存。

试试 http://code.google.com/p/android-screenshot-library/

关于java - Android - 如何以编程方式截取屏幕截图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20136121/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com