Как я могу запретить Android делать скриншот, когда мое приложение уходит в фоновый режим?
приложение, которое я в настоящее время создаю, имеет требование, чтобы приложение не позволяло ОС делать скриншот приложения, когда оно выталкивается в фоновый режим по соображениям безопасности. Таким образом, он не сможет увидеть последний активный экран при переключении между приложениями.
Я планирую поместить эту функциональность в метод onPause класса приложения, но сначала мне нужно узнать, как я могу достичь этой функциональности.
Так есть кто-нибудь там, что есть подсказка, как это исправить?
3 ответов
попробовать 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
, переполнение панели действий и т. д. - будет небезопасно. Вы можете исправить
будьте осторожны с использованием WindowManager.LayoutParams.FLAG_SECURE, на некоторых устройствах (проверено на Samsung Galaxy ACE, например GT-S5830) это сделает вид скремблированным. Похоже на конкретную ошибку Samsung. Я рекомендую следующее:
if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB) {
getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);
}
вот как выглядит скремблированный экран:
это работает правильно на телефонах ICS Samsung, поэтому я предполагаю, что проблема изолирована от пряничных устройств (или старше).
решение, предоставленное CommonsWare, продолжает действовать и в Lollipop.
просто Примечание, Если вы хотите продолжить не см. снимки в последнем списке для весь app, все реализованные мероприятия должны указать в onCreate()
способ флаг getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);
до setContentView();
В противном случае снимок в недавнем списке покажет первое действие без флага, если пользователь прошел через него.