如何在没有root手机的情况下拍摄安卓屏幕的屏幕截图不是自己的活动视图?

时间:2013-12-22 05:50:20

标签: android

我已经编写了代码。

public static void loadBitmapFromView(Context context, View v) {
    DisplayMetrics dm = context.getResources().getDisplayMetrics(); 
    v.measure(MeasureSpec.makeMeasureSpec(dm.widthPixels, MeasureSpec.EXACTLY),
            MeasureSpec.makeMeasureSpec(dm.heightPixels, MeasureSpec.EXACTLY));
    v.layout(0, 0, v.getMeasuredWidth(), v.getMeasuredHeight());
    Bitmap returnedBitmap = Bitmap.createBitmap(v.getMeasuredWidth(),
            v.getMeasuredHeight(), Bitmap.Config.ARGB_8888);
    Canvas c = new Canvas(returnedBitmap);
    v.draw(c);

    takeScreen(returnedBitmap);
}

public static void takeScreen(Bitmap bitmap) {
    //Bitmap bitmap = ImageUtils.loadBitmapFromView(this, view); //get Bitmap from the view
    String mPath = Environment.getExternalStorageDirectory() + File.separator + "screen_" + System.currentTimeMillis() + ".jpeg";
    File imageFile = new File(mPath);

    try {
        OutputStream fout = new FileOutputStream(imageFile);
        bitmap.compress(Bitmap.CompressFormat.JPEG, 90, fout);
        fout.flush();
        fout.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

视图

View v1 = getWindow().getDecorView().findViewById(android.R.id.content).getRootView();

但这需要我们的应用程序的当前活动屏幕截图。 我想屏幕我的android当前屏幕而不是我自己当前的活动。请提供解决方案。

2 个答案:

答案 0 :(得分:0)

无法在非root设备上执行此操作。这是Android安全性的基石之一 - 应用程序不会干扰其他应用程序或监视它们。

采取另一个应用程序截图实质上是间谍。举个例子,想象一下你从一个不太受信任的来源下载并安装了一些有趣的游戏或无用的实用程序。如果可以截取非自己的活动截图,那么该游戏就可以截取您在网络浏览器中输入银行密码的截图,并将其发回给该应用程序的邪恶开发者。那将是一场灾难,不是吗?

答案 1 :(得分:0)

因为您已经证明已经有第三方应用程序(不是三星应用程序)可以截取某些三星设备上的任何应用程序的屏幕截图。

我建议你试试: http://developer.samsung.com/home.do

如果他们的sdks中没有任何关于截图的明显信息。我建议你看看三星AllShare/Miracast SDK。 AllShare是三星自己的MiraCast扩展。这就像DNLA(如果你知道DNLA是什么)。它允许开发人员/或用户在电视(支持协议)上无线投影他们的屏幕。

如果搜索无法进行,请查看s.pen sdk。并试着看看他们是否通过三星笔为第三方开发者提供了截屏方式。现在我意识到你的三星手机没有笔,但由于三星设备之间有很多TouchWiz共享代码。如果您找到一个公开的公共挂钩供该用于截取屏幕,您可以在三星设备上找到一个没有该屏幕的设备。

另一方面,如果您愿意支持仅限Tegra的设备。只有一些HTC设备和Xiomi设备甚至使用Tegra,所以它不是一个很大的市场份额。这似乎也是可能的:

https://play.google.com/store/apps/details?id=net.tedstein.AndroSS

为此,我建议您调查HTC SDK和Nvidia Tegra Development Pack。对不起,我没有时间为您研究这些解决方案。请在此报告,告诉我们您的发现,无论是积极的还是消极的。