Per creare un'esperienza più standardizzata per il rilevamento degli screenshot, Android 14 introduce un'API di rilevamento degli screenshot che tutela la privacy. 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 gli screenshot acquisiti durante l'esecuzione di comandi di test relativi agli screenshot, tra cui ADB, o all'interno di test di misurazione che acquisiscono i contenuti dello schermo corrente del dispositivo.
Passaggi per l'implementazione
Per aggiungere il rilevamento degli screenshot, dichiara la nuova autorizzazione DETECT_SCREEN_CAPTURE
al momento dell'installazione:
<uses-permission android:name="android.permission.DETECT_SCREEN_CAPTURE" />
Quindi, completa questi passaggi per ogni attività nella tua app in cui gli utenti potrebbero acquisire screenshot:
Implementa un callback sostituendo la funzione
onScreenCapture()
. In questo callback, la tua app può intervenire, ad esempio avvisando un altro utente che qualcuno ha acquisito uno screenshot di una conversazione di messaggistica.val screenCaptureCallback = Activity.ScreenCaptureCallback { // Add logic to take action in your app. }
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.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) }
@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:
Controllare la possibilità di acquisire screenshot
Se non vuoi che i contenuti dell'attività di un'app vengano visualizzati negli screenshot o su display non sicuri, imposta il flag di visualizzazione FLAG_SECURE
.
activity.getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE)
activity.getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);