Предотвращать захват экрана в приложениях Android

Мне было интересно, есть ли способ обнаружить через какой-либо метод обратного вызова onXXXXX или получить широковещательную передачу, если какой-то другой процесс вот-вот отобразит экран моего приложения. Например, если инструменты SDK или какое-либо другое приложение для захвата экрана выполняет "Захват экрана", я хотел бы получить уведомление, а затем решить, следует ли разрешить или запретить захват экрана.

Если это невозможно, есть ли способ заблокировать отображение, чтобы никакой другой процесс не мог отображать мой дисплей?

Ответ 1

Существует нет поддерживаемого метода, чтобы сделать снимок экрана другого приложения на Android. Единственные способы включают в себя либо укоренение, либо использование SDK, которые обе дают вам мало шансов, что вы либо заблокируете, либо получите уведомление об этом. Если другое приложение занимает ваш скриншот, оно по умолчанию использует не поддерживаемые методы и, вероятно, может делать то, что ему нравится.

Я хотел бы уточнить, что я не подразумеваю, что вы не должны использовать какие-либо методы для защиты вашего приложения. Я просто даю вам понять, что, возможно, это невозможно сделать без использования не поддерживаемых методов, и даже если вы их используете, вы не можете быть на 100% защищены от скриншотов.

Ответ 2

Это сработало для меня на 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