Когда Android делает снимок экрана с переключателем последних приложений?

Я разрабатываю приложение, которое имеет личную информацию и не должно отображать реальный снимок экрана в недавнем переключателе приложений Android. Я пробовал вариант этого решения, установив представление содержимого в ImageView внутри функции onPause, но кажется, что операционная система делает снимок экрана до того, как представление содержимого будет изменено на пользовательское изображение.

Мне также известно об установке флагов параметра макета окна для защиты, делая скриншот полностью белым, но я надеюсь, что будет возможность настроить скриншот.

Итак, мне интересно, в какой момент Android делает снимок экрана приложения для переключателя приложений (в частности, в KitKat и Lollipop).


person Louie Bertoncin    schedule 23.06.2015    source источник


Ответы (1)


ИЗМЕНИТЬ

Больше невозможно настроить снимок экрана, который система использует для представления миниатюры в недавних приложениях.

Старый ответ

Взгляните на метод Activity.onCreateThumbnail — это именно то, что вам нужно, так как он позволяет вам нарисовать собственный эскиз для экрана «Последние».

Вы получаете Canvas как один из параметров, в котором можно рисовать (или не рисовать вообще) напрямую. Суть в том, что вы должны вернуть true из этого метода, что указывает на то, что система не будет рисовать миниатюру сама.

Самым простым решением будет:

@Override
public boolean onCreateThumbnail (Bitmap outBitmap, Canvas canvas) {
    // Do nothing or draw on Canvas
    return true;
}

или если вы хотите нарисовать свой собственный Bitmap

@Override
public boolean onCreateThumbnail (Bitmap outBitmap, Canvas canvas) {
    Bitmap myBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.myBitmap);
    canvas.drawBitmap(myBitmap, 0, 0, null);

    return true;
}
person Dmitry Zaytsev    schedule 23.06.2015
comment
Могу ли я получить пример кода о том, как использовать растровое изображение и холст? Я также пробовал это раньше и не знал, как манипулировать двумя. - person Louie Bertoncin; 23.06.2015
comment
@LouieBertoncin добавил пример - person Dmitry Zaytsev; 23.06.2015
comment
Хорошо, вот что я сделал, чтобы использовать два параметра: outBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.myBitmap); canvas.drawBitmap(outBitmap, 0, 0, new Paint()); - person Louie Bertoncin; 23.06.2015
comment
@LouieBertoncin, вы не должны изменять входящий outBitmap - он уже создан системой. Java по-прежнему передается по значению, поэтому, заменяя ссылку outBitmap, вы ничего не меняете. Вместо этого вы должны нарисовать Bitmap прямо на Canvas. stackoverflow.com/questions/13361231/ - person Dmitry Zaytsev; 23.06.2015
comment
Этот метод, кажется, никогда не вызывается для меня. У меня есть оператор журнала внутри тела, который никогда не печатается. Есть ли какие-то настройки для этого метода? - person Louie Bertoncin; 23.06.2015
comment
@LouieBertoncin, ты все еще используешь FLAG_SECURE? Насколько я знаю, это предотвратит вызов системой onCreateThumbnail. - person Dmitry Zaytsev; 24.06.2015
comment
Давайте продолжим обсуждение в чате. - person Louie Bertoncin; 24.06.2015
comment
По какой-то причине метод onCreateThumbnail() никогда не вызывался, но это должен быть правильный ответ, и он подробно объяснен. Спасибо @DmitryZaitsev - person Louie Bertoncin; 26.06.2015
comment
Этот подход не работает еще и потому, что метод onCreateThumbnail не вызывается. - person Gunhan; 19.11.2015
comment
Итак, как мы можем получить собственное изображение для списка недавней истории? Любое обходное решение? - person james; 16.06.2016
comment
Я почти уверен, что это возможно, потому что видел, как это работает на приложение CommerzBank. - person azizbekian; 19.04.2018
comment
Из документации Activity для onCreateThumbnail(): этот метод устарел на уровне API 28. Метод ничего не делает и будет удален в будущем. - person happydude; 11.10.2018