Приложение Я'м работает на выставках некоторые конфиденциальные данные, которые не должны быть показаны в графе "Последние задачи" на экране при остановке приложения, нажав кнопку Домой.
Я'd, как, чтобы стереть конфиденциальные данные на скриншоте или показать логотип приложения, а не.
Мне известны следующие подходы, но они не'т соответствовать моим требованиям:
И затем есть некоторые обходные пути, которые я попробовал, но ничего'т работать, как ожидалось:
Любые альтернативные идеи или решения перечисленных обходные пути?
Я посмотрел на это пару месяцев назад для тех же целей, как вы.
К сожалению, я пришла к выводу, что это просто не возможно. Я покопался в исходном коде Android и подтвердил это.
FLAG_SECURE
, эта часть кода не принимает никаких входных или изменить.SECURE_FLAG
, или любое другое препятствие на вид). Кроме того, эти изображения можно найти на эмулятор на /данных/system_ce/0/recent_images
. Как обсуждалось в https://stackoverflow.com/questions/9130599/how-to-change-the-snapshot-shown-by-recent-apps-list есть обратный вызов, который вы можете использовать, чтобы настроить миниатюру: onCreateThumbnail. Однако, это не работает и он никогда не вызывается. Чтобы быть ясным, этот метод еще есть, это просто никогда не вызывается операционной системы. Тот факт, что он перестал работать, плохо документирована, но, видимо, молча устаревшие/удаленные в 4.0.3
Что касается самой миниатюры, это Скриншот взят на сервере. Это взято до методов onPause называется (или на самом деле перед любым обратных вызовов, указывающих, что ваша деятельность не собирается идти на второй план называется).
Когда приложение идет в фоновом режиме, ваш фактический вид анимировано (чтобы получить зум-переходный период). Что анимация может быть затронуты в результате изменений вы делать в методов onPause (если вы'вновь так быстро, что это) (я экспериментировал с настройками opacity на 0 в окне между прочим). Однако это касается только анимации. Когда анимация закончена, вид заменяется скриншот сделан раньше.
Также видим, что эти вопросы, которые обсуждают это:
Как насчет реализации макета поверх всей вашей деятельности?
Сделать его прозрачным, это'ы по клику по умолчанию, поэтому не оказывает негативного влияния на УБ во время использования.
В методов onPause()устанавливаем полупрозрачное, размытое изображение в качестве фона макета, данные будут кинулись за ним. В onResume()
изменение фона, чтобы снова полностью прозрачным. Вуаля.
Это может быть быстрее, чем другие типы накладок. Положительный побочный эффект, если вы делаете unblurring как короткий эффект анимации, когда пользователь возвращается (с правильным библиотека, которая использует C++ вместо Java), он может даже выглядеть круто и пользователи даже не против видеть его.
Я не'т пытались это сам, но это's что-то вы еще'т пытались сделать.
Есть способ, чтобы настроить его. Вы нужны вашей деятельности с конфиденциальными данными в FLAG_SECURE
в метод
перед setContentView
. Тогда вам нужна пустая активность, которая делает то, что вы хотите иметь как индивидуальные эскизы. Обычно это какая-то заставка. Этот новый вид деятельности должен быть Launcher и является единственным видом деятельности, не FLAG_SECURE`. Эта деятельность запускается и в onResume начинает свою фактическую деятельность с конфиденциальными данными.
ОС Android будет сделать скриншот, что новый вид деятельности в начале вашего приложения. К сожалению, пользователи также будут видеть эту деятельность на короткое время. Так как каждая другая деятельность является FLAG_SECURE
, ОС Android будет использовать единственный доступный скриншот, он сделан в самом начале.
Я думаю, что это можно достигнуть только через приемник BroadcastReceiver, но нет приемника присутствует. Поэтому вы сначала отключите по умолчанию скриншот функциональность в Android, а затем и реализовать свой собственный функционал для снятия скриншотов и прежде чем принимать скриншот, вы должны размытие вашей защищенной информации.