Мне было интересно, есть ли способ определить с помощью какого-либо метода обратного вызова "onXXXXX" или полученной трансляции, если какой-либо другой процесс собирается сделать снимок экрана моего приложения. Например, если инструменты SDK или какое-либо другое приложение для захвата экрана выполняет "захват экрана", я хотел бы получить уведомление, а затем решить, следует ли разрешить или запретить захват экрана.
Если это невозможно, есть ли способ заблокировать дисплей, чтобы никакой другой процесс не мог захватить мой экран?
Ответ 1 · рейтинг 5 · jakebasile
не поддерживается метод для создания снимка экрана другого приложения на Андроид. Единственные способы включают либо рутирование, либо использование SDK, которые практически не дают вам шанса заблокировать или получить уведомление об этом. Если другое приложение делает снимок экрана, оно по умолчанию использует неподдерживаемые методы и, вероятно, может делать то, что ему заблагорассудится.
Я хотел бы уточнить, что я не подразумеваю, что вы не должны использовать какие-либо доступные методы для защиты вашего приложения. Я просто сообщаю вам, что это, вероятно, невозможно сделать без использования неподдерживаемых методов, и что даже если вы их используете, вы не можете быть на 100% защищены от скриншотов.
Ответ 2 · рейтинг 25 · user330844
Это сработало для меня на Samsung Tab 2 7 ".
Используя следующий подход, просто добавьте FLAG_SECURE к Оконные флаги
public class FlagSecureTestActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setFlags(LayoutParams.FLAG_SECURE,
LayoutParams.FLAG_SECURE);
setContentView(R.layout.main);
}
}
с оговоркой, что вам, возможно, придется изменить
LayoutParams
to
WindowManager.LayoutParams