Как предотвратить захват экрана в Android
Возможно ли предотвратить запись экрана в приложении Android?
Я хотел бы разработать Android Secure Application. В этом я должен обнаружить программное обеспечение для записи экрана, которое работает на фоне и убивает их. Я использовал SECURE FLAG для предотвращения скриншотов. Но я не знаю, возможно ли предотвратить захват видео с экрана Android. Дайте мне знать, как предотвратить захват экрана (видео / скриншоты).
- Есть ли способ определить высоту экрана в андроиде в сантиметрах или дюймах?
- Нужно ли мне 14 различных макетов для поддержки всех Android-устройств?
- PhoneGap - принудительная ориентация ландшафта
Я собираюсь сказать, что невозможно полностью предотвратить захват экрана / видео любого приложения Android с помощью поддерживаемых средств. Но если вы хотите заблокировать его для обычных Android-устройств, SECURE FLAG является существенным.
1) Защищенный флаг блокирует как обычный снимок экрана, так и видеозапись.
Также документация по этой ссылке говорит, что
Флаг windows: обрабатывать содержимое windows как безопасное, предотвращать его появление на снимках экрана или просмотр на незащищенных дисплеях.
Выше решение наверняка не позволит приложениям захватывать видео вашего приложения
См. Ответ здесь .
2) Существуют альтернативные способы захвата содержимого экрана.
Может быть возможно захватить экран другого приложения на корневом устройстве или с помощью SDK,
которые обе дают вам мало шансов, что вы либо заблокируете его, либо получите уведомление об этом.
Например: существует программное обеспечение для зеркального отображения экрана телефона на ваш компьютер с помощью SDK, и поэтому программное обеспечение для захвата экрана может быть использовано там, которое невозможно обнаружить в вашем приложении.
См. Ответ здесь .
Просто добавьте эту строку:
getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
Перед вашим setContentView()
.
Кажется, что вы знаете, как отключить скриншоты из вашего приложения, и есть другие ответы, которые помогут вам в этом. Но я постараюсь дать вам важную информацию, которую никто не дает вам.
1) У вас не может быть приложения, которое на 100% безопаснее снимать скриншоты (фото / видео). Официального способа делать скриншоты в Android нет. Если приложение записывает экраны, то оно должно использовать некоторые не поддерживаемые методы (либо укоренение, либо использование SDK).
Существует очень мало возможностей для блокировки приложения, если он использует root-доступ к экранам записи.
2) Никто не упоминал об этой проблеме, но будьте очень осторожны при использовании WindowManager.LayoutParams.FLAG_SECURE
. Он был проверен на многих устройствах (например, на Samsung Galaxy ACE, например GT-S5830), что делает весь вид скремблированным. Как это,
Пожалуйста, поставьте чек, как это,
if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB) { getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE); }
Он отлично работает на устройствах ICS, поэтому проблем нет.
3) Я также узнал, что даже на более новых устройствах, таких как Android 4.3, это вызывает проблемы с анимацией при повороте экрана. Проверьте этот отчет об ошибке.
Попробуй это:
getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
Вы можете сделать свое приложение владельцем устройства / профиля и вызвать setScreenCaptureDisabled()
. Из документов это api делает следующее:
public void setScreenCaptureDisabled (администратор ComponentName, boolean disabled) Добавлен в API уровня 21
Вызывается владельцем устройства / профиля, чтобы установить, отключен ли захват экрана. Отключение захвата экрана также предотвращает показ содержимого на устройствах, которые не имеют защищенного видеовыхода. Подробнее о защищенных поверхностях и защищенных дисплеях см. FLAG_SECURE.
Администратор вызывающего устройства должен быть владельцем устройства или профиля. Если это не так, будет выведено исключение безопасности. Параметры admin Какой DeviceAdminReceiver связан с этим запросом. отключено Независимо от того, отключен ли захват экрана или нет.
В качестве альтернативы вы можете стать партнерским приложением MDM (Mobile Device Management). AME предоставляет дополнительные API-интерфейсы своим партнерским приложениям MDM для управления устройством. Например, samsung предоставляет api для управления записью экрана на устройстве своим партнерам по MDM.
В настоящее время это единственный способ принудительного применения ограничений захвата экрана.
Чтобы отключить Screen Capture:
Добавьте следующую строку кода в onCreate()
:
getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);
Чтобы включить Screen Capture:
Найдите для LayoutParams.FLAG_SECURE
и удалите строку кода.
В соответствии с этим официальным руководством вы можете добавить WindowManager.LayoutParams.FLAG_SECURE
в свой макет windows, и он будет запрещать скриншоты.
о скриншоте фото, FLAG_SECURE не работает укорененное устройство.
но если вы отслеживаете файл скриншота, вы можете предотвратить получение исходного файла.
попробуйте это.
1. мониторинг снимков экрана (файловый монитор) с помощью удаленной службы Android
2. Удалите исходный снимок экрана.
3. доставьте экземпляр растрового изображения, чтобы вы могли его изменить.