Pour créer une expérience plus standardisée, Android 14 introduit une API de détection des captures d'écran protégeant la confidentialité. Cette API permet aux applications d'enregistrer des rappels par activité. Ces rappels sont appelés, et l'utilisateur en est informé lorsqu'une capture d'écran est prise et que cette activité est visible.
Cas d'utilisation compatibles
Dans Android 14, l'API système ne détecte une capture d'écran que si l'utilisateur effectue une combinaison spécifique sur les boutons physiques. L'API ne détecte pas les captures d'écran effectuées lors de l'exécution de commandes de test liées aux captures d'écran, y compris ADB, ou dans les tests d'instrumentation qui capturent les contenus actuels de l'écran de l'appareil.
Procédure d'implémentation
Pour ajouter la détection de captures d'écran, déclarez la nouvelle autorisation au moment de l'installation, DETECT_SCREEN_CAPTURE
:
<uses-permission android:name="android.permission.DETECT_SCREEN_CAPTURE" />
Ensuite, procédez comme suit pour chaque activité de votre application dans lesquelles les utilisateurs peuvent effectuer des captures d'écran :
Implémentez un rappel en remplaçant la fonction
onScreenCapture()
. Dans ce rappel, votre application peut prendre des mesures, par exemple avertir un autre utilisateur que quelqu'un a pris une capture d'écran d'une conversation par messages.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. } };
Dans la méthode
onStart()
de l'activité, enregistrez le rappel de la capture d'écran.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); }
Dans la méthode
onStop()
de l'activité, annulez le rappel de capture d'écran:Kotlin
override fun onStop() { super.onStop() unregisterScreenCaptureCallback(screenCaptureCallback) }
Java
@Override protected void onStop() { super.onStop(); unregisterScreenCaptureCallback(screenCaptureCallback); }
Contrôler la possibilité de faire des captures d'écran
Si vous ne souhaitez pas que le contenu de l'activité d'une application apparaisse sur des captures d'écran ou sur des écrans non sécurisés, définissez l'indicateur d'affichage FLAG_SECURE
.
Kotlin
activity.getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE)
Java
activity.getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);