如何在Android上制作捕获屏幕应用程序

时间:2013-09-11 09:52:50

标签: android screen screenshot capture

我想创建一个可以在没有root的情况下捕获设备屏幕的应用程序: https://play.google.com/store/apps/details?id=com.icecoldapps.screenshotultimate

但我找不到解决方案。 有人帮我吗?

非常感谢。

4 个答案:

答案 0 :(得分:1)

以编程方式,您可以使用adb:

执行以下命令
adb shell /system/bin/screencap -p /sdcard/img.png

但是,要从应用程序执行相同操作,您可以使用以下方法:

Process sh = Runtime.getRuntime().exec("su", null,null); //getting superuser permission to access /system/bin
OutputStream  os = sh.getOutputStream();
os.write(("/system/bin/screencap -p " + "/sdcard/img.png").getBytes("ASCII")); //executing the command
os.flush();
os.close();
sh.waitFor();

/sdcard/中,您将拥有 img.png ,这将是您的屏幕截图。

答案 1 :(得分:0)

从应用的常见问题解答:

  

我的设备没有“捕获方法”!

     

如果您的设备未植根,则这是正常现象。这就是Android安全模型的工作方式;它只是不允许在某些设备上截取屏幕截图。但是,您可以通过计算机启用设备上的屏幕截图功能。要了解如何执行此操作,请转到“屏幕截图Ultimate”> “设置”> “捕获方法”> “没有捕获方法的帮助”。您可以将手册通过电子邮件发送给自己,以便在计算机上完成(Windows,Linux或Mac OSX)。

答案 2 :(得分:0)

检查这是否可以帮助你。 以下代码将帮助您捕获特定布局的屏幕

RelativeLayout screenShotLayout=(RelativeLayout)findViewById(R.id.ScreenShotLayout);

Bitmap Bitmapimage=Bitmap.createBitmap(screenShotLayout.getWidth(),screenShotLayout.getHeight(), Config.ARGB_8888);
screenShotLayout.setDrawingCacheEnabled(true);
screenShotLayout.buildDrawingCache();
Bitmapimage=screenShotLayout.getDrawingCache();
//Bitmapimage is the screenshot of the layout. Do your stuff with it

答案 3 :(得分:0)

// image naming and path  to include sd card  appending name you choose for file
String mPath = Environment.getExternalStorageDirectory().toString() + "/" + ACCUWX.IMAGE_APPEND;   

// create bitmap screen capture
Bitmap bitmap;
View v1 = mCurrentUrlMask.getRootView();
v1.setDrawingCacheEnabled(true);
bitmap = Bitmap.createBitmap(v1.getDrawingCache());
v1.setDrawingCacheEnabled(false);

OutputStream fout = null;
imageFile = new File(mPath);

try {
    fout = new FileOutputStream(imageFile);
    bitmap.compress(Bitmap.CompressFormat.JPEG, 90, fout);
    fout.flush();
    fout.close();

} catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

访问文件:

Uri uri = Uri.fromFile(new File(mPath));