我正在尝试实现一个系统,如果发生未捕获的异常,我的异常处理程序将获取活动的屏幕截图,作为错误报告的一部分进行保存和发送。这在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中截取屏幕截图?
答案 0 :(得分:0)
你不想要:
Bitmap viewBmp = Bitmap.createBitmap(view.getLayoutParams().width, view.getLayoutParams().height,
Bitmap.Config.ARGB_8888);
LayoutParams
通常没有实际的宽度和高度。通常它有负值,表示wrap_content
或match_parent
。
相反,请尝试:
Bitmap viewBmp = Bitmap.createBitmap(view.getWidth(), view.getHeight(),
Bitmap.Config.ARGB_8888);
或类似的东西。您需要容器的实际宽度和高度,而不是LayoutParams
所要求的宽度和高度。