Предотвратить захват экрана в приложениях Android
Мне было интересно, есть ли способ с помощью какого-либо метода обратного вызова "onXXXXX" или полученной широковещательной рассылки, если какой-то другой процесс собирается сделать снимок экрана моего приложения. Например, если инструменты SDK или какое-либо другое приложение для захвата экрана выполняет "Захват экрана", я хотел бы получить уведомление, а затем решить, следует ли мне разрешить или запретить захват экрана.
Если это невозможно, есть ли способ заблокировать дисплей, чтобы никакой другой процесс не смог захватить мой экран?
2 ответа
Не поддерживается способ сделать снимок экрана другого приложения на Android. Единственные способы включают в себя либо рутирование, либо использование SDK, которые оба дают мало шансов, что вы либо заблокируете, либо получите уведомление об этом. Если другое приложение делает ваш снимок экрана, оно по умолчанию использует неподдерживаемые методы и, вероятно, может делать все, что пожелает.
Я хотел бы уточнить, что я не имею в виду, что вы не должны использовать какие-либо методы, доступные для защиты вашего приложения. Я просто сообщаю вам, что, вероятно, невозможно сделать это без использования неподдерживаемых методов, и что даже если вы их используете, вы не можете быть на 100% защищены от скриншотов.
Это работало для меня на 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
в
WindowManager.LayoutParams