在UncaughtExceptionHandler中截取屏幕截图

时间:2013-10-28 11:34:10

标签: android exception-handling null screenshot drawingcache

我正在尝试实现一个系统,如果发生未捕获的异常,我的异常处理程序将获取活动的屏幕截图,作为错误报告的一部分进行保存和发送。这在Android中甚至可能吗?我将活动传递给构造函数中的异常处理程序,但到目前为止我用于获取屏幕截图的每次尝试都返回null。

我尝试了以下内容:

尝试一次:

private Bitmap screenshot() {
    View view = activity.getWindow().getDecorView(); //also tried getDecorView().getRootView()
    view.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
    view.setDrawingCacheEnabled(true);
    view.buildDrawingCache(true);
    Bitmap image = view.getDrawingCache();
    Rect windowbounds = new Rect();
    view.getWindowVisibleDisplayFrame(windowbounds);
    int width = activity.getWindowManager().getDefaultDisplay().getWidth();
    int height = activity.getWindowManager().getDefaultDisplay().getHeight();
    Bitmap secondaryBitmap = Bitmap.createBitmap(image, 0, 0, width, height);
    view.destroyDrawingCache();
    return secondaryBitmap;
}

尝试二:

private Bitmap screenshot2()
{
    View view = activity.getWindow().getDecorView(); //also tried getDecorView().getRootView()
    view.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
    Bitmap viewBmp = Bitmap.createBitmap(view.getWidth(),view.getHeight(),
            Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(viewBmp);
    view.draw(canvas);
    return viewBmp;
}

在尝试#1中,view.getDrawingCache()返回null,在尝试#2 Bitmap.createBitmap返回null。

任何Android开发者都知道如何在UncaughtExceptionHandler中截取屏幕截图?

1 个答案:

答案 0 :(得分:0)

你不想要:

Bitmap viewBmp = Bitmap.createBitmap(view.getLayoutParams().width, view.getLayoutParams().height,
        Bitmap.Config.ARGB_8888);

LayoutParams通常没有实际的宽度和高度。通常它有负值,表示wrap_contentmatch_parent

相反,请尝试:

Bitmap viewBmp = Bitmap.createBitmap(view.getWidth(), view.getHeight(),
        Bitmap.Config.ARGB_8888);

或类似的东西。您需要容器的实际宽度和高度,而不是LayoutParams所要求的宽度和高度。