Um eine standardisierte Erkennung von Screenshots zu ermöglichen, Android 14 führt eine datenschutzfreundliche Screenshot-Erkennung ein der API erstellen. Mit dieser API können Apps Callbacks pro Aktivität registrieren. Diese Callbacks ausgelöst und der Nutzer wird benachrichtigt, während diese Aktivität sichtbar ist.
Unterstützte Anwendungsfälle
Unter Android 14 erkennt die System-API nur dann einen Screenshot, wenn der Nutzer eine bestimmte Kombination von Tastenbetätigungen. Die API erkennt keine die beim Ausführen von Testbefehlen für Screenshots erstellt werden, einschließlich ADB, oder im Rahmen von Instrumentierungstests, die die aktuellen Bildschirminhalt
Schritte zur Implementierung
Deklariere das neue DETECT_SCREEN_CAPTURE
, um die Screenshot-Erkennung hinzuzufügen
Berechtigung für die Installation:
<uses-permission android:name="android.permission.DETECT_SCREEN_CAPTURE" />
Führen Sie diese Schritte dann für jede Aktivität in Ihrer App aus, bei der Nutzende Screenshots erstellen:
Implementieren Sie einen Callback, indem Sie die Funktion
onScreenCapture()
überschreiben. In dieser kann deine App eine Aktion ausführen, z. B. einen anderen Nutzer warnen, Jemand hat einen Screenshot von einer Unterhaltung gemacht.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. } };
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); }
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 die Inhalte einer App-Aktivität in Screenshots erscheinen, oder
Auf nicht sicheren Displays 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);