Erkennen, wenn Nutzer Screenshots auf dem Gerät erstellen

Mitteilung „Pay-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 einer App aufnimmt, die die Screenshot-Erkennungs-API unterstützt.

Android 14 führt eine datenschutzfreundliche Screenshot-Erkennungs-API ein, um die Erkennung von Screenshots zu standardisieren. Mit dieser API können Apps Callbacks 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

In Android 14 erkennt die System-API einen Screenshot nur, wenn der Nutzer eine bestimmte Kombination von Hardware-Tastendrücken ausführt. Die API erkennt keine Screenshots, die aufgenommen werden, wenn Testbefehle im Zusammenhang mit Screenshots ausgeführt werden, einschließlich ADB, oder bei Instrumentierungstests, bei denen die aktuellen Bildschirminhalte des Geräts erfasst werden.

Implementierungsschritte

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, bei 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 Nachrichtenunterhaltung aufgenommen 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 den Screenshot-Callback in der Methode onStart() der Aktivität.

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

    Kotlin

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

    Java

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

Möglichkeit zum Aufnehmen von Screenshots steuern

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

Kotlin

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

Java

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