Um die Erkennung von Screenshots zu standardisieren, wird in 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 erstellt, während die 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 Hardwaretasten drückt. Die API erkennt keine Screenshots, die beim Ausführen von Testbefehlen im Zusammenhang mit Screenshots erstellt werden, einschließlich ADB, oder innerhalb von Instrumentierungstests, die den aktuellen Bildschirminhalt des Geräts erfassen.
Implementierungsschritte
Wenn Sie die Screenshot-Erkennung hinzufügen möchten, deklarieren Sie die neue Berechtigung DETECT_SCREEN_CAPTURE für die Installation:
<uses-permission android:name="android.permission.DETECT_SCREEN_CAPTURE" />
Führe dann die folgenden Schritte für jede Aktivität in deiner App aus, bei der Nutzer Screenshots erstellen können:
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 Unterhaltung in einer Messaging-App 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 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 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 Erstellen von Screenshots steuern
Wenn Sie nicht möchten, dass die Inhalte der Aktivität einer App in Screenshots oder auf nicht sicheren Displays angezeigt werden, 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);