Попробуй FLAG_SECURE
:
public class FlagSecureTestActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE,
WindowManager.LayoutParams.FLAG_SECURE);
setContentView(R.layout.main);
}
}
Это определенно защищает от ручных снимков экрана и автоматических снимков экрана из истории недавних задач ICS. Он также защищает от записи экрана (например, приложений, использующих API проекции мультимедиа).
ОБНОВЛЕНИЕ : это также защищает от Now On Tap или других помощников на Android 6.0; они не получат доступ к деталям виджетов и контейнеров в вашем пользовательском интерфейсе, если пользователь вызовет помощника.
ОБНОВЛЕНИЕ № 2 : однако, не все в деятельности будут защищены. Любые всплывающие окна - Dialog
, Spinner
, AutoCompleteTextView
, действие Переполнение бар и т.д. - будет небезопасно. Вы можете решить Dialog
проблему, вызвав getWindow()
ее и установив FLAG_SECURE
. Остальное ... становится сложнее. Смотрите этот блог для получения дополнительной информации.
FLAG_SECURE
существует с самого начала - до недавнего времени он имел ограниченное значение.FLAG_SECURE
он не защитится от этого, поскольку он слишком низкоуровневый. Точно так же, если вы взяли свою собственную иерархию виджетов иBitmap
обратили ее к -backedCanvas
,FLAG_SECURE
вероятно, не защититесь от этого, так как вы делаете свои собственные скриншоты своих собственных виджетов и, следовательно, по-видимому, хотели иметь «безопасные» там.FLAG_SECURE
для системных скриншотов, таких как миниатюры недавних задач.Будьте осторожны с использованием WindowManager.LayoutParams.FLAG_SECURE, на некоторых устройствах (проверено на Samsung Galaxy ACE, например GT-S5830) это сделает представление зашифрованным. Похоже, конкретная ошибка Samsung. Я рекомендую следующее:
Вот как выглядит скремблированный экран:
Это работает должным образом на телефонах ICS Samsung, поэтому я предполагаю, что проблема изолирована от устройств Gingerbread (или более старых).
источник
Решение, предоставленное CommonsWare, продолжает действовать и в Lollipop.
Просто обратите внимание: если вы хотите, чтобы по-прежнему не отображались снимки в недавнем списке для всего приложения, ВСЕ реализованные действия должны указывать в
onCreate()
методе флагgetWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);
передsetContentView();
В противном случае снимок в последнем списке покажет первое действие без флага, если пользователь прошел через него.
источник
Вот решение для того, чтобы скрыть содержимое приложения, закрыв его заставкой, когда приложение помещается в фоновый режим. Это не использование техники FLAG_SECURE, я просто переопределяю методы onPause и onResume экранов и изменяю представление, чтобы оно отображало то, что покрывает все сзади.
https://stackoverflow.com/a/52976001/6686912
источник
это сработало для меня, оно не позволяет делать снимок экрана, а также любое встроенное или стороннее приложение для записи с экрана записи.
источник
Это работа для меня после добавления этих строк в onCreate перед setContentView каждого действия.
источник