Сделать снимок экрана в UncaughtExceptionHandler
Я пытаюсь внедрить систему, в которой в случае возникновения неперехваченного исключения мой обработчик исключений сделает снимок экрана действия, который будет сохранен и отправлен как часть отчета об ошибке. Это вообще возможно в Android? Я передаю действие обработчику исключений в конструкторе, но каждая попытка, которую я до сих пор использовал, чтобы получить снимок экрана, возвращалась с нулевым значением.
Я пробовал следующее:
Попытка первая:
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() возвращает ноль, а при попытке № 2 Bitmap.createBitmap возвращает ноль.
Кто-нибудь из разработчиков Android знает, как сделать снимок экрана в UncaughtExceptionHandler?
1 ответ
Ты не хочешь:
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
,