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:
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. } };
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); }
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);