当前位置: 首页 > 知识库问答 >
问题:

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

程英资
2023-03-14

我开发了截图的应用程序。但它只拍摄应用程序的快照。我想从应用程序中取出快照。我已经研究了答案,但还没有找到答案。这是我的代码

View view = getWindow().getDecorView().getRootView();
view.setDrawingCacheEnabled(true);
Bitmap bitmap = Bitmap.createBitmap(view.getDrawingCache());
view.setDrawingCacheEnabled(false);
saveImageToAppFolder(bitmap);

saveImagetoAppFolder是将图像保存到应用程序文件夹的函数。那不是问题。有没有什么可以拍屏幕快照的?

共有1个答案

储志业
2023-03-14

要拍摄设备屏幕的屏幕快照,只有当根用户调用屏幕快照二进制文件时,才可以:

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 reqWidth, 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;
    }
 类似资料:
  • 我需要使用Sikuli的自动化,但我无法采取截图。问题是,当我点击“截屏”或“创建区域”时,IDE会被隐藏,但选择区域选项不会出现....

  • 问题内容: 我正在构建一个称为“ HTML测验”的东西。它完全在JavaScript上运行,非常酷。 最后,弹出一个结果框,显示“您的结果:”,它显示了他们花费了多少时间,他们得到了多少百分比以及他们从10个问题中得出了多少个问题。我想有一个按钮,上面写着“捕获结果”,并使其以某种方式截取屏幕截图或div,然后仅在页面上显示捕获的图像即可在其中单击鼠标右键并“将图像另存为”。 我真的很想这样做,以

  • 我找了很多,但找不到解决办法。这里有一个类似的问题,在java中有一个可能的解决方案。 Python中有类似的解决方案吗?

  • 使用Android Studio开发颤振将LogCat控制台替换为run选项卡。 这很好,但是我如何拍摄调试设备的屏幕截图呢?以前我经常展开LogCat侧菜单并单击捕获图像按钮,但现在我在任何地方都找不到它。

  • 我目前正在尝试实现Ashot来为我当前的项目截图,它正在为桌面工作。 但我想知道如何在iOS和Android设备上实现它,互联网上没有太多信息。 我使用了以下视口,它正在为iPad截图: 屏幕截图FullPage=new AShot()。拍摄策略(ShootingStrategies.viewportRetina(100,0,0,2))。截图(司机); 但是我想知道如何使用给定的属性来为其他IOS

  • 问题内容: 我要实现的是从python中的任何网站获取网站截图。 环境:Linux 问题答案: 在Mac上,有webkit2png,在Linux+KDE上,可以使用khtml2png。我已经尝试了前者,并且效果很好,并且听说后者已投入使用。 我最近遇到了QtWebKit,它声称是跨平台的(我猜Qt将WebKit卷入了他们的库中)。但是我从未尝试过,所以我无法告诉您更多信息。 QtWebKit链接显