Erkennen, wenn Nutzer Screenshots auf dem Gerät erstellen

Meldung „Pay-App hat diesen Screenshot erkannt“
Abbildung 1: Ein Beispiel für die vom System bereitgestellte Kurzmitteilung, die angezeigt wird, wenn der Nutzer einen Screenshot einer App erstellt, die die Screenshot Detection API unterstützt.

Um die Erkennung von Screenshots zu standardisieren, wird mit Android 14 eine datenschutzfreundliche API zur Erkennung von Screenshots eingeführt. Mit dieser API können Apps Rückrufe pro Aktivität registrieren. Diese Callbacks werden aufgerufen und der Nutzer wird benachrichtigt, wenn er einen Screenshot aufnimmt, während diese Aktivität sichtbar ist.

Unterstützte Anwendungsfälle

Unter Android 14 erkennt die System-API einen Screenshot nur, wenn der Nutzer eine bestimmte Kombination von Hardwaretastendrücken ausführt. Die API erkennt keine Screenshots, die beim Ausführen von Testbefehlen im Zusammenhang mit Screenshots aufgenommen werden, einschließlich ADB, oder innerhalb von Instrumentierungstests, die den aktuellen Bildschirminhalt des Geräts erfassen.

Schritte zur Implementierung

Wenn Sie die Screenshot-Erkennung hinzufügen möchten, deklarieren Sie die neue DETECT_SCREEN_CAPTURE-Berechtigung für die Installationszeit:

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

Führen Sie dann die folgenden Schritte für jede Aktivität in Ihrer App aus, in der Nutzer Screenshots aufnehmen könnten:

  1. Implementieren Sie einen Callback, indem Sie die Funktion onScreenCapture() überschreiben. In diesem Callback kann Ihre App Maßnahmen ergreifen, z. B. einen anderen Nutzer warnen, dass jemand einen Screenshot einer Messaging-Unterhaltung gemacht hat.

    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. Registrieren Sie in der onStart()-Methode der Aktivität den Screenshot-Callback.

    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. Heben Sie in der onStop()-Methode der Aktivität die Registrierung des Screenshot-Callbacks auf:

    Kotlin

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

    Java

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

Screenshots aufnehmen

Wenn der Inhalt der Aktivität einer App nicht in Screenshots oder auf nicht sicheren Displays angezeigt werden soll, legen Sie das Display-Flag FLAG_SECURE fest.

Kotlin

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

Java

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