предотвратить захват экрана в приложениях Android - PullRequest
13 голосов
/ 20 июля 2011

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

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

Ответы [ 2 ]

20 голосов
/ 27 августа 2012

Это сработало для меня на 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
5 голосов
/ 20 июля 2011

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

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

...