Erkennen, wenn Nutzer Screenshots auf dem Gerät machen

Nachricht „Die Zahlungs-App hat diesen Screenshot erkannt“
Abbildung 1. Ein Beispiel für die vom System bereitgestellte Toast-Nachricht, die angezeigt wird, wenn der Nutzer einen Screenshot von einer App aufnimmt, die die Screenshot Detection API unterstützt.

Um eine standardisierte Erkennung von Screenshots zu ermöglichen, wird in Android 14 eine datenschutzfreundliche Screenshoterkennungs-API eingeführt. Mit dieser API können Apps Callbacks pro Aktivität registrieren. Diese Callbacks werden aufgerufen und der Nutzer wird benachrichtigt, wenn er einen Screenshot macht, während diese Aktivität sichtbar ist.

Unterstützte Anwendungsfälle

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

Schritte zur Implementierung

Deklarieren Sie die neue Berechtigung DETECT_SCREEN_CAPTURE für die Installationszeit, um die Screenshoterkennung hinzuzufügen:

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

Führe dann diese Schritte für jede Aktivität in deiner App aus, in der Nutzer Screenshots erstellen können:

  1. Implementieren Sie einen Callback, indem Sie die Funktion onScreenCapture() überschreiben. In diesem Callback kann Ihre App Aktionen ausführen, 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 den Screenshot-Callback auf:

    Kotlin

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

    Java

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

Möglichkeit zum Erstellen von Screenshots steuern

Wenn Sie nicht möchten, dass der Inhalt der App-Aktivität in Screenshots oder auf nicht sicheren Displays angezeigt wird, setzen Sie das Anzeige-Flag FLAG_SECURE.

Kotlin

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

Java

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