我有一个root设备,我使用以下代码成功捕获了当前屏幕的屏幕截图:
Process process = Runtime.getRuntime().exec("su");
DataOutputStream os = new DataOutputStream(process.getOutputStream());
os.writeBytes("/system/bin/screencap -p " + path + "; \n");
但是在命令中我提供了我想保存文件的路径,系统需要花时间在文件中写入图像。我们可以以字节的形式直接从进程中获取图像数据吗?我想立即将当前图像发送到服务器。
答案 0 :(得分:1)
screencap应该将图像数据打印到stdout:
用法:screencap [-hp] [-d display-id] [FILENAME]
-h:这条消息
-p:将文件另存为png。
-d:指定要捕获的显示ID,默认为0.
如果FILENAME以.png结尾,则会将其保存为png 如果未给出FILENAME,则结果将打印到标准输出。
Process process = Runtime.getRuntime().exec("su");
DataOutputStream os = new DataOutputStream(process.getOutputStream());
os.writeBytes("/system/bin/screencap\n");
然后,您可以使用process.getInputStream()
答案 1 :(得分:0)
我认为 mah 指出也不可能。
下面的代码将帮助您在内存中写入图像时保持应用程序的响应。
这是因为UI/main thread
忙于将捕获的屏幕截图写入内存。因此,解决此问题的最简单方法是AsyncTask.
public CaptureScreenShot extends Activity
{
ArrayList<bitmap> arrayListImage;
int i=0;
public void captureScreenshot()
{
i++;
// store the image in arrayList "image"
new BackgroudClass.execute();
}
private class BackgroudClass extends AsyncTask<Void, Void, Void>
{
@Override
protected Void doInBackgroud(Void.. params)
{
// write the image from arrayList at imageArrayList.get(i);
}
}
@Override
public onStop()
{
arrayListImage = null; // making it eligible for GC
}
希望这有帮助。