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

阿瓦达尼Y

我需要每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的“刷新”和“保存”按钮的功能?我能做到吗?

维斯瓦纳特·莱克希玛南(Viswanath Lekshmanan)

如果您的手机已扎根,请尝试此操作

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用户,否则您将无法访问该屏幕,即使您在后台运行,以上代码也可以最有效地捕获任何屏幕的屏幕截图。

更新

Google尝试了一个库,您可以在不生根的情况下使用它来截取屏幕截图,但是我敢保证它会尽快耗尽内存。

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何以编程方式在Android中打开当前活动的屏幕截图?

来自分类Dev

Android:以编程方式获取所选区域的屏幕截图

来自分类Dev

android中的屏幕截图以编程方式

来自分类Dev

Android(4.3及更高版本。)如何以编程方式锁定屏幕?

来自分类Dev

Android-如何以编程方式获取parentActivityName属性值?

来自分类Dev

如何以编程方式获取Samsung Android设备名称?

来自分类Dev

如何以编程方式从Android获取whatsapp联系人?

来自分类Dev

android gradle如何以编程方式获取模块路径?

来自分类Dev

如何以编程方式获取Android Google设置?

来自分类Dev

如何以编程方式获取完整的android应用UID?

来自分类Dev

Android:如何以编程方式获取布局的宽度

来自分类Dev

如何以编程方式获取当前在Android中播放的歌曲

来自分类Dev

android gradle如何以编程方式获取模块路径?

来自分类Dev

如何以编程方式获取 Android 中视图的 XML 代码?

来自分类Dev

如何在 ReactJS android 应用程序中以编程方式截取屏幕截图?

来自分类Dev

当从 Android 的锁定屏幕单击通知操作时,如何以编程方式解锁屏幕?

来自分类Dev

如何以编程方式检测android屏幕尺寸(4种标准尺寸)?

来自分类Dev

如何以编程方式拍摄iPad主屏幕的屏幕截图?

来自分类Dev

如何以编程方式使用android:digits

来自分类Dev

如何以编程方式导致Android延迟?

来自分类Dev

如何以编程方式执行Android Numpad

来自分类Dev

Android屏幕截图编程错误

来自分类Dev

如何以编程方式在Android设备中获取设备(AOSP)内部版本号?

来自分类Dev

如何以编程方式获取相对宽度和高度-Android中的线性布局?

来自分类Dev

如何以编程方式获取android.R.id.content的资源ID?

来自分类Dev

如何以编程方式在android6.0中获取SD_Card路径

来自分类Dev

如何以编程方式获取Android ListView的快速滚动缩略图视图?

来自分类Dev

如何以抖动方式通过编程获取Android导航栏的高度和宽度?

来自分类Dev

如何以编程方式获取特定Android应用程序的uri?

Related 相关文章

  1. 1

    如何以编程方式在Android中打开当前活动的屏幕截图?

  2. 2

    Android:以编程方式获取所选区域的屏幕截图

  3. 3

    android中的屏幕截图以编程方式

  4. 4

    Android(4.3及更高版本。)如何以编程方式锁定屏幕?

  5. 5

    Android-如何以编程方式获取parentActivityName属性值?

  6. 6

    如何以编程方式获取Samsung Android设备名称?

  7. 7

    如何以编程方式从Android获取whatsapp联系人?

  8. 8

    android gradle如何以编程方式获取模块路径?

  9. 9

    如何以编程方式获取Android Google设置?

  10. 10

    如何以编程方式获取完整的android应用UID?

  11. 11

    Android:如何以编程方式获取布局的宽度

  12. 12

    如何以编程方式获取当前在Android中播放的歌曲

  13. 13

    android gradle如何以编程方式获取模块路径?

  14. 14

    如何以编程方式获取 Android 中视图的 XML 代码?

  15. 15

    如何在 ReactJS android 应用程序中以编程方式截取屏幕截图?

  16. 16

    当从 Android 的锁定屏幕单击通知操作时,如何以编程方式解锁屏幕?

  17. 17

    如何以编程方式检测android屏幕尺寸(4种标准尺寸)?

  18. 18

    如何以编程方式拍摄iPad主屏幕的屏幕截图?

  19. 19

    如何以编程方式使用android:digits

  20. 20

    如何以编程方式导致Android延迟?

  21. 21

    如何以编程方式执行Android Numpad

  22. 22

    Android屏幕截图编程错误

  23. 23

    如何以编程方式在Android设备中获取设备(AOSP)内部版本号?

  24. 24

    如何以编程方式获取相对宽度和高度-Android中的线性布局?

  25. 25

    如何以编程方式获取android.R.id.content的资源ID?

  26. 26

    如何以编程方式在android6.0中获取SD_Card路径

  27. 27

    如何以编程方式获取Android ListView的快速滚动缩略图视图?

  28. 28

    如何以抖动方式通过编程获取Android导航栏的高度和宽度?

  29. 29

    如何以编程方式获取特定Android应用程序的uri?

热门标签

归档