java – 如何拍摄屏幕快照不仅在Android中的应用程序与代码

前端之家收集整理的这篇文章主要介绍了java – 如何拍摄屏幕快照不仅在Android中的应用程序与代码前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我开发了应用程序,需要截图.
但它只是应用程序的快照.我想从应用程序中拍摄快照.
我已经研究了答案,但我还没有找到答案.
这是我的代码
View view = getWindow().getDecorView().getRootView();
view.setDrawingCacheEnabled(true);
Bitmap bitmap = Bitmap.createBitmap(view.getDrawingCache());
view.setDrawingCacheEnabled(false);
saveImageToAppFolder(bitmap);

saveImagetoAppFolder是将图像保存到应用程序文件夹的功能.
这不是问题.
有没有拍摄屏幕的快照?

解决方法

要拍摄设备屏幕的屏幕截图,只有有root用户
调用screencap二进制如:
Process sh = Runtime.getRuntime().exec("su",null,null);
OutputStream  os = sh.getOutputStream();
os.write(("/system/bin/screencap -p " + Environment.getExternalStorageDirectory()+ "/img.png").getBytes("ASCII"));
os.flush();
os.close();
sh.waitFor()

并将该文件加载到位图中,使用

public static Bitmap decodeSampledBitmapFromFile(String path,int reqWidth,int reqHeight) {

        // First decode with inJustDecodeBounds=true to check dimensions
        final BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;
        BitmapFactory.decodeFile(path,options);

        // Calculate inSampleSize
        options.inSampleSize = calculateInSampleSize(options,reqWidth,reqHeight);

        // Decode bitmap with inSampleSize set
        options.inJustDecodeBounds = false;
        return BitmapFactory.decodeFile(path,options);
    }

    public static int calculateInSampleSize(
            BitmapFactory.Options options,int reqHeight) {
        // Raw height and width of image
        final int height = options.outHeight;
        final int width = options.outWidth;
        int inSampleSize = 1;

        if (height > reqHeight || width > reqWidth) {

            final int halfHeight = height / 2;
            final int halfWidth = width / 2;

            // Calculate the largest inSampleSize value that is a power of 2 and keeps both
            // height and width larger than the requested height and width.
            while ((halfHeight / inSampleSize) > reqHeight
                    && (halfWidth / inSampleSize) > reqWidth) {
                inSampleSize *= 2;
            }
        }

        return inSampleSize;
    }

猜你在找的Android相关文章