Para criar uma experiência mais padronizada para detectar capturas de tela, o Android 14 apresenta uma API de detecção de capturas de tela que preserva a privacidade. Ela permite que os apps registrem callbacks por atividade. Esses callbacks são invocados, e o usuário é notificado quando faz uma captura de tela enquanto a atividade está visível.
Casos de uso com suporte
No Android 14, a API do sistema só detecta uma captura de tela quando o usuário pressiona uma combinação específica de botões físicos. A API não detecta capturas de tela que são feitas com comandos de teste relacionados a elas, incluindo testes com o adb ou testes de instrumentação que capturam o conteúdo atual da tela do dispositivo.
Etapas de implementação
Para adicionar a detecção de capturas de tela, declare a nova permissão de instalação
DETECT_SCREEN_CAPTURE
:
<uses-permission android:name="android.permission.DETECT_SCREEN_CAPTURE" />
Em seguida, conclua estas etapas para cada atividade no app em que os usuários podem fazer capturas de tela:
Implemente um callback substituindo a função
onScreenCapture()
. Nesse callback, seu app pode realizar ações, como avisar outro usuário de que alguém fez uma captura de tela de uma conversa por mensagens.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. } };
No método
onStart()
da atividade, registre o callback da captura de tela.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); }
No método
onStop()
da atividade, cancele o registro do callback da captura de tela:Kotlin
override fun onStop() { super.onStop() unregisterScreenCaptureCallback(screenCaptureCallback) }
Java
@Override protected void onStop() { super.onStop(); unregisterScreenCaptureCallback(screenCaptureCallback); }
Controlar a capacidade de fazer capturas de tela
Se você não quiser que o conteúdo da atividade de um app apareça em capturas de tela ou
em telas não seguras, defina a flag de exibição FLAG_SECURE
.
Kotlin
activity.getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE)
Java
activity.getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);