Aby zapewnić bardziej ujednolicony sposób wykrywania zrzutów ekranu, w Androidzie 14 wprowadzamy interfejs API do wykrywania zrzutów ekranu, który zapewnia ochronę prywatności. Ten interfejs API umożliwia aplikacjom rejestrowanie wywołań zwrotnych na podstawie poszczególnych działań. Te funkcje są wywoływane i użytkownik jest powiadamiany, gdy robi zrzut ekranu, gdy ta aktywność jest widoczna.
Obsługiwane przypadki użycia
W Androidzie 14 interfejs API systemu wykrywa zrzut ekranu tylko wtedy, gdy użytkownik naciśnie określone kombinacje przycisków sprzętowych. Interfejs API nie wykrywa zrzutów ekranu wykonanych podczas wykonywania poleceń testowych związanych ze zrzutami ekranu, w tym ADB, ani w ramach testów instrumentacji, które przechwytują bieżącą zawartość ekranu urządzenia.
Etapy wdrażania
Aby dodać wykrywanie zrzutów ekranu, zadeklaruj nowe uprawnienie DETECT_SCREEN_CAPTURE
dodawane w czasie instalacji:
<uses-permission android:name="android.permission.DETECT_SCREEN_CAPTURE" />
Następnie wykonaj te czynności w przypadku każdej aktywności w aplikacji, w której użytkownicy mogą robić zrzuty ekranu:
Zaimplementuj wywołanie zwrotne, zastępując funkcję
onScreenCapture()
. W tym wywołaniu zwrotnym aplikacja może podjąć działanie, np. ostrzec innego użytkownika, że ktoś zrobił zrzut ekranu rozmowy w aplikacji do obsługi wiadomości.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. } };
W metodzie
onStart()
aktywności zarejestruj wywołanie zwrotne zrzutu ekranu.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); }
W metodzie
onStop()
aktywności anuluj rejestrację funkcji wywołania zwrotnego związanego z zrzutem ekranu:Kotlin
override fun onStop() { super.onStop() unregisterScreenCaptureCallback(screenCaptureCallback) }
Java
@Override protected void onStop() { super.onStop(); unregisterScreenCaptureCallback(screenCaptureCallback); }
kontrolować możliwość robienia zrzutów ekranu.
Jeśli nie chcesz, aby zawartość aktywności aplikacji była widoczna na zrzutach ekranu lub na niezabezpieczonych wyświetlaczach, ustaw flagę wyświetlania FLAG_SECURE
.
Kotlin
activity.getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE)
Java
activity.getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);