截取屏幕截图 - 后台服务

时间:2017-05-31 15:14:25

标签: java android android-service screenshot

我尝试使用后台服务截取屏幕截图。这项服务就像一个Facebook聊天室,但是我希望它在我点击时拍摄截图。

Preview Picture

我已经开发了一些代码,但它不起作用。我最后一次尝试的是:

private void takeScreenshot() {
    Date now = new Date();
    android.text.format.DateFormat.format("yyyy-MM-dd_hh:mm:ss", now);

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

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

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

        try {
            fout = new FileOutputStream(imageFile);
            bitmap.compress(Bitmap.CompressFormat.JPEG, 100, 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();
        }
}

但是截图到我的按钮而不是屏幕。

我知道问题在这里:

View v1 = chatHead.getRootView();

但我不知道如何解决它。任何人都可以帮助我吗?

我实际上使用的是Android Studio 2.2.2和Android 4.0或更高版本。

3 个答案:

答案 0 :(得分:4)

要获取包含不属于您应用的视图的屏幕截图,您需要使用MediaProjectionManager

请参阅How to take a screen shot with status bar contents in android application?

答案 1 :(得分:3)

对于Lollipop及以上版本,您可以使用Google的MediaProjection API截取屏幕截图,但您需要征得用户的同意。

您可以使用MediaProjection Here

找到示例截屏代码

对于少于Lollipop的设备,你需要root权限。

答案 2 :(得分:0)

使用Android MediaProjectionManager#createScreenCaptureIntent API中提供的MediaProjection。您现在正在做的是获取chatHead的根视图信息,而不是设备整个屏幕(包括顶部的状态栏)上显示的信息。