Подтвердить что ты не робот

Как предотвратить захват экрана в Android

Можно ли предотвратить запись экрана в приложении Android?

Я хотел бы разработать Android Secure Application. В этом я должен обнаружить программное обеспечение для записи экрана, которое работает на фоне и убивает их. Я использовал SECURE FLAG для предотвращения скриншотов. Но я не знаю, возможно ли предотвратить захват видео с экрана Android. Дайте мне знать, как предотвратить захват экрана (видео/скриншоты).

4b9b3361

Ответ 1

Я собираюсь сказать, что невозможно полностью предотвратить захват экрана/видео любого приложения Android с помощью поддерживаемых средств. Но если вы хотите заблокировать его для обычных Android-устройств, SECURE FLAG является существенным.

1) Защищенный флаг блокирует как обычный снимок экрана, так и видеозапись.

Также документация на эта ссылка говорит, что

Флаг окна: обрабатывать содержимое окна как защищенное, препятствовать его появлению на снимках экрана или просмотру на незащищенных дисплеях.

Выше решение наверняка не позволит приложениям захватывать видео вашего приложения.

См. ответ здесь.

2) Существуют альтернативные способы захвата содержимого экрана.

Возможно, возможно захватить экран другого приложения на корневом устройстве или с помощью SDK,

которые обе дают вам мало шансов, что вы либо заблокируете его, либо получите уведомление об этом.

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

См. ответ здесь.

Ответ 2

Просто добавьте эту строку:

getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);

До вашего метода setContentView().

Ответ 3

Чтобы отключить Screen Capture:

Добавьте следующую строку кода в метод onCreate():

getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE,
                           WindowManager.LayoutParams.FLAG_SECURE);

Чтобы включить Screen Capture:

Найдите LayoutParams.FLAG_SECURE и удалите строку кода.

Ответ 4

Попробуйте следующее:

getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);

Ответ 5

Кажется, вы знаете, как отключить скриншоты из вашего приложения, и есть другие ответы, которые помогут вам в этом. Но я постараюсь дать вам важную информацию, которую никто не дает вам.

1) У вас не может быть приложения, которые на 100% защищены от снимков экрана (фото/видео). Существует нет официального пути, чтобы делать скриншоты в Android. Если приложение записывает экраны, то оно должно использовать некоторые не поддерживаемые методы (либо укоренение, либо использование SDK).

Существует очень мало возможностей для блокировки приложения, если он использует root-доступ к экранам записи.

2) Никто здесь не упоминал об этом, но будьте очень осторожны при использовании WindowManager.LayoutParams.FLAG_SECURE. Он был проверен на многих устройствах (например, на Samsung Galaxy ACE, например GT-S5830), что делает весь вид скремблированным. Как это,

enter image description here

Пожалуйста, поставьте чек, например:

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, это вызывает проблемы с анимацией при повороте экрана. проверьте этот отчет об ошибке.

Ответ 6

Вы можете сделать свое приложение владельцем устройства/профиля и вызвать setScreenCaptureDisabled(). Из docs этот api делает следующее:

public void setScreenCaptureDisabled (администратор ComponentName, boolean disabled) Добавлено в API уровня 21

Вызывается владельцем устройства/профиля, чтобы установить, является ли захват экрана отключен. Отключение захвата экрана также предотвращает отображаемых на устройствах, которые не имеют защищенного видеовыхода. Дополнительную информацию об защищенных поверхностях см. В документе FLAG_SECURE. дисплеи.

Администратор вызывающего устройства должен быть владельцем устройства или профиля. Если это а не исключение безопасности. Параметры admin Что DeviceAdminReceiver, с которым связан этот запрос. отключено захват экрана отключен или нет.

В качестве альтернативы вы можете стать партнерским приложением для управления мобильными устройствами. AME предоставляет дополнительные API-интерфейсы своим партнерским приложениям MDM для управления устройством. Например, samsung обеспечивает api для управления записью экрана на устройстве своим партнерам по MDM.

В настоящее время это единственный способ, который вы можете применить к ограничениям захвата экрана.

Ответ 7

Для пользователей Java

getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);

Для пользователей kotlin

window.setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE)

Ответ 8

В соответствии с этим официальным руководством вы можете добавить WindowManager.LayoutParams.FLAG_SECURE к вашему макету окна и отключить скриншоты.

Ответ 9

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

@Override
protected void onResume() {
    getWindow().clearFlags(WindowManager.LayoutParams.FLAG_SECURE);
    super.onResume();
}

@Override
protected void onPause() {
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);
    super.onPause();
}

Ответ 10

о скриншоте, FLAG_SECURE не работает с корневым устройством.

но если вы отслеживаете файл скриншота, вы можете предотвратить получение исходного файла.

попробуйте один.

1. мониторинг снимков экрана (файловый монитор) с помощью удаленной службы Android
2. Удалите исходный снимок экрана.
3. доставьте экземпляр растрового изображения, чтобы вы могли его изменить.

Ответ 11

Add this line below setContentview Method in Activity.


getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE,
                    WindowManager.LayoutParams.FLAG_SECURE);

Ответ 12

Я видел все ответы, которые подходят только для одного действия, но есть мое решение, которое будет блокировать скриншот для всех действий без добавления какого-либо кода в действие. Прежде всего, создайте класс Custom Application и добавьте registerActivityLifecycleCallbacks Затем зарегистрируйте его в своем манифесте.

MyApplicationContext.class

public class MyApplicationContext extends Application {
    private  Context context;
    public void onCreate() {
        super.onCreate();
        context = getApplicationContext();
        setupActivityListener();
    }

    private void setupActivityListener() {
        registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
            @Override
            public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
                activity.getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);            }
            @Override
            public void onActivityStarted(Activity activity) {
            }
            @Override
            public void onActivityResumed(Activity activity) {

            }
            @Override
            public void onActivityPaused(Activity activity) {

            }
            @Override
            public void onActivityStopped(Activity activity) {
            }
            @Override
            public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
            }
            @Override
            public void onActivityDestroyed(Activity activity) {
            }
        });
    }



}

манифест

 <application
        android:name=".MyApplicationContext"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">