Wykrywanie, kiedy użytkownicy robią zrzuty ekranu na urządzeniu

Komunikat „Aplikacja Pay wykryła ten zrzut ekranu”
Rysunek 1. Przykład udostępnionego przez system komunikatu wyświetlanego, gdy użytkownik robi zrzut ekranu aplikacji, która obsługuje interfejs API wykrywania zrzutów ekranu.

Aby ujednolicić proces wykrywania zrzutów ekranu, w Androidzie 14 wprowadziliśmy chroniący prywatność interfejs API do wykrywania zrzutów ekranu. Ten interfejs API umożliwia aplikacjom rejestrowanie wywołań zwrotnych dla poszczególnych działań. Te wywołania zwrotne są wywoływane, a użytkownik otrzymuje powiadomienie, gdy zrobi zrzut ekranu w sytuacji, gdy aktywność jest widoczna.

Obsługiwane zastosowania

W Androidzie 14 systemowy interfejs API wykrywa zrzut ekranu tylko wtedy, gdy użytkownik naciśnie przycisk na urządzeniu w określonej kombinacji. Interfejs API nie wykrywa zrzutów ekranu, które są wykonywane podczas wykonywania poleceń testowych związanych ze zrzutami ekranu, w tym z ADB, ani w testach narzędzi, które przechwytują bieżącą zawartość ekranu urządzenia.

Etapy wdrażania

Aby dodać wykrywanie zrzutów ekranu, zadeklaruj nowe uprawnienie DETECT_SCREEN_CAPTURE do instalowania:

<uses-permission android:name="android.permission.DETECT_SCREEN_CAPTURE" />

Następnie w przypadku każdej czynności w aplikacji, w której użytkownicy mogą robić zrzuty ekranu, wykonaj te czynności:

  1. Aby zaimplementować wywołanie zwrotne, zastąp funkcję onScreenCapture(). W tym wywołaniu zwrotnym aplikacja może wykonać określone działanie, np. ostrzec innego użytkownika, że ktoś zrobił zrzut ekranu rozmowy w aplikacji do obsługi wiadomości.

    Kotlin

    val screenCaptureCallback = Activity.ScreenCaptureCallback {
        // Add logic to take action in your app.
    }

    Java

    final Activity.ScreenCaptureCallback screenCaptureCallback =
        new Activity.ScreenCaptureCallback() {
            @Override
            public void onScreenCaptured() {
                // Add logic to take action in your app.
            }
        };
  2. W metodzie onStart() aktywności zarejestruj wywołanie zwrotne zrzutu ekranu.

    Kotlin

    override fun onStart() {
        super.onStart()
        // Pass in the callback created in the previous step 
        // and the intended callback executor (e.g. Activity's mainExecutor).
        registerScreenCaptureCallback(mainExecutor, screenCaptureCallback)
    }

    Java

    @Override
    protected void onStart() {
        super.onStart();
        // Pass in the callback created in the previous step 
        // and the intended callback executor (e.g. Activity's mainExecutor).
        registerScreenCaptureCallback(executor, screenCaptureCallback);
    }
  3. W metodzie onStop() aktywności anuluj rejestrację funkcji wywołania zwrotnego związanego z zrzutem ekranu:

    Kotlin

    override fun onStop() {
        super.onStop()
        unregisterScreenCaptureCallback(screenCaptureCallback)
    }

    Java

    @Override
    protected void onStop() {
        super.onStop();
        unregisterScreenCaptureCallback(screenCaptureCallback);
    }

kontrolować możliwość robienia zrzutów ekranu.

Jeśli nie chcesz, aby zawartość aktywności aplikacji była widoczna na zrzutach ekranu lub na niezabezpieczonym wyświetlaczu, ustaw flagę wyświetlania FLAG_SECURE.

Kotlin

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

Java

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