Aby ujednolicić proces wykrywania zrzutów ekranu, w Androidzie 14 wprowadziliśmy chroniący prywatność interfejs API do wykrywania zrzutów ekranu. Ten interfejs API umożliwia aplikacjom rejestrowanie wywołań zwrotnych dla poszczególnych działań. Te wywołania zwrotne są wywoływane, a użytkownik otrzymuje powiadomienie, gdy zrobi zrzut ekranu w sytuacji, gdy aktywność jest widoczna.
Obsługiwane zastosowania
W Androidzie 14 systemowy interfejs API wykrywa zrzut ekranu tylko wtedy, gdy użytkownik naciśnie przycisk na urządzeniu w określonej kombinacji. Interfejs API nie wykrywa zrzutów ekranu, które są wykonywane podczas wykonywania poleceń testowych związanych ze zrzutami ekranu, w tym z ADB, ani w testach narzędzi, które przechwytują bieżącą zawartość ekranu urządzenia.
Etapy wdrażania
Aby dodać wykrywanie zrzutów ekranu, zadeklaruj nowe uprawnienie DETECT_SCREEN_CAPTURE
do instalowania:
<uses-permission android:name="android.permission.DETECT_SCREEN_CAPTURE" />
Następnie w przypadku każdej czynności w aplikacji, w której użytkownicy mogą robić zrzuty ekranu, wykonaj te czynności:
Aby zaimplementować wywołanie zwrotne, zastąp funkcję
onScreenCapture()
. W tym wywołaniu zwrotnym aplikacja może wykonać określone 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 niezabezpieczonym wyświetlaczu, 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);