Damit die Erkennung von Screenshots standardisiert werden kann, wird mit Android 14 eine datenschutzfreundliche API zur Screenshot-Erkennung 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 aufnimmt, 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 Hardwaretasten drückt. 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ühren Sie dann diese Schritte für jede Aktivität in Ihrer App aus, bei der Nutzer Screenshots erstellen können:
Implementieren Sie einen Callback, indem Sie die
onScreenCapture()
-Funktion überschreiben. In diesem Callback kann Ihre App Maßnahmen ergreifen und beispielsweise einen anderen Nutzer warnen, dass jemand einen Screenshot einer Messaging-Unterhaltung erstellt 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. } };
Registrieren Sie den Screenshot-Callback in der
onStart()
-Methode 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); }
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); }
Möglichkeit zum Aufnehmen von Screenshots festlegen
Wenn Sie nicht möchten, dass der Inhalt einer App-Aktivität in Screenshots oder auf unsicheren Displays angezeigt wird, legen Sie das Anzeige-Flag FLAG_SECURE
fest.
Kotlin
activity.getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE)
Java
activity.getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);