Per creare un'esperienza di rilevamento degli screenshot più standardizzata, Android 14 introduce un rilevamento di screenshot incentrato sulla tutela della privacy tramite Google Cloud CLI o tramite l'API Compute Engine. Questa API consente alle app di registrare i callback in base all'attività. Questi callback vengono richiamati e l'utente riceve una notifica quando acquisisce uno screenshot mentre l'attività è visibile.
Casi d'uso supportati
In Android 14, l'API di sistema rileva uno screenshot solo se l'utente esegue una combinazione specifica di pressioni dei pulsanti hardware. L'API non rileva screenshot acquisiti durante l'esecuzione di comandi di test correlati agli screenshot; incluso ADB o all'interno dei test di strumentazione che acquisiscono i contenuti correnti dello schermo.
Passaggi per l'implementazione
Per aggiungere il rilevamento di screenshot, dichiara la nuova DETECT_SCREEN_CAPTURE
autorizzazione al momento dell'installazione:
<uses-permission android:name="android.permission.DETECT_SCREEN_CAPTURE" />
Poi completa questi passaggi per ogni attività nella tua app in cui gli utenti potrebbero acquisisci screenshot:
Implementa un callback eseguendo l'override della funzione
onScreenCapture()
. In questo il callback, la tua app può intervenire, ad esempio avvisare un altro utente che qualcuno ha acquisito uno screenshot di una conversazione di messaggi.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. } };
Nel metodo
onStart()
dell'attività, registra il callback dello screenshot.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); }
Nel metodo
onStop()
dell'attività, annulla la registrazione del callback dello screenshot:Kotlin
override fun onStop() { super.onStop() unregisterScreenCaptureCallback(screenCaptureCallback) }
Java
@Override protected void onStop() { super.onStop(); unregisterScreenCaptureCallback(screenCaptureCallback); }
Controlla la possibilità di acquisire screenshot
Se non vuoi che i contenuti dell'attività di un'app vengano mostrati negli screenshot, oppure
sui display non sicuri, imposta il flag di visualizzazione FLAG_SECURE
.
Kotlin
activity.getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE)
Java
activity.getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);