Uprawnienia związane z lokalizacją, mikrofonem i aparatem przyznają aplikacji dostęp do szczególnie wrażliwych informacji o użytkownikach. Platforma zawiera kilka mechanizmów opisanych na tej stronie, które pomagają użytkownikom uzyskiwać informacje i kontrolować, które aplikacje mogą uzyskiwać dostęp do lokalizacji, mikrofonu i aparatu.
Te funkcje systemowe chroniące prywatność nie powinny wpływać na sposób, w jaki aplikacja obsługuje uprawnienia związane z lokalizacją, mikrofonem i aparatem, o ile przestrzegasz sprawdzonych metod ochrony prywatności.
W szczególności wykonaj w aplikacji te czynności:
- Zaczekaj z dostępem do aparatu urządzenia, aż użytkownik przyzna Twojej aplikacji uprawnienie
CAMERA
. - Nie uzyskuj dostępu do mikrofonu urządzenia, dopóki użytkownik nie przyzna aplikacji uprawnień
RECORD_AUDIO
. - Zanim poprosisz użytkownika o uprawnienia
ACCESS_COARSE_LOCATION
lubACCESS_FINE_LOCATION
, poczekaj, aż skorzysta on w aplikacji z funkcji, która wymaga dostępu do lokalizacji. Postępuj zgodnie z instrukcjami podanymi w przewodniku na temat proszenia o uprawnienia do lokalizacji. - Zanim poprosisz o uprawnienie
ACCESS_BACKGROUND_LOCATION
, poczekaj, aż użytkownik przyzna aplikacji uprawnienieACCESS_COARSE_LOCATION
lubACCESS_FINE_LOCATION
.
Panel prywatności
Na obsługiwanych urządzeniach z Androidem 12 lub nowszym w ustawieniach systemu pojawia się ekran Panel prywatności. Na tym ekranie użytkownicy mogą otwierać osobne ekrany, na których widać, kiedy aplikacje uzyskują dostęp do informacji o lokalizacji, aparacie i mikrofonie. Na każdym ekranie wyświetlana jest oś czasu, która pokazuje, kiedy różne aplikacje uzyskały dostęp do określonego typu danych. Ilustracja 1 przedstawia oś czasu dostępu do danych o lokalizacji.
Wyświetlanie uzasadnienia dostępu do danych
Aplikacja może podać uzasadnienie, aby pomóc użytkownikom zrozumieć, dlaczego uzyskuje dostęp do informacji o lokalizacji, aparacie lub mikrofonie. Uzasadnienie może się pojawić na nowym ekranie panelu prywatności, na ekranie uprawnień aplikacji lub w obu tych miejscach.
Aby wyjaśnić, dlaczego Twoja aplikacja uzyskuje dostęp do informacji o lokalizacji, aparacie i mikrofonie, wykonaj te czynności:
Dodaj aktywność, która po uruchomieniu zawiera uzasadnienie, dlaczego Twoja aplikacja wykonuje określony typ działania związanego z dostępem do danych. W ramach tej aktywności ustaw atrybut
android:permission
naSTART_VIEW_PERMISSION_USAGE
.Jeśli Twoja aplikacja jest kierowana na Androida 12 lub nowszego, musisz wyraźnie określić wartość atrybutu
android:exported
.Dodaj do nowo dodanej aktywności ten filtr intencji:
<!-- android:exported required if you target Android 12. --> <activity android:name=".DataAccessRationaleActivity" android:permission="android.permission.START_VIEW_PERMISSION_USAGE" android:exported="true"> <!-- VIEW_PERMISSION_USAGE shows a selectable information icon on your app permission's page in system settings. VIEW_PERMISSION_USAGE_FOR_PERIOD shows a selectable information icon on the Privacy Dashboard screen. --> <intent-filter> <action android:name="android.intent.action.VIEW_PERMISSION_USAGE" /> <action android:name="android.intent.action.VIEW_PERMISSION_USAGE_FOR_PERIOD" /> <category android:name="android.intent.category.DEFAULT" /> ... </intent-filter> </activity>
Określ, co ma się wyświetlać w uzasadnieniu dostępu do danych. Możesz na przykład wyświetlić witrynę aplikacji lub artykuł w Centrum pomocy. Aby podać bardziej szczegółowe wyjaśnienie dotyczące typów danych, do których aplikacja uzyskuje dostęp, oraz czasu, w którym ten dostęp nastąpił, obsłuż dodatkowe informacje, które system uwzględnia podczas wywoływania intencji użycia uprawnień:
- Jeśli system wywoła funkcję
ACTION_VIEW_PERMISSION_USAGE
, Twoja aplikacja może pobrać wartość parametruEXTRA_PERMISSION_GROUP_NAME
. - Jeśli system wywoła
ACTION_VIEW_PERMISSION_USAGE_FOR_PERIOD
, aplikacja może pobrać wartościEXTRA_PERMISSION_GROUP_NAME
,EXTRA_ATTRIBUTION_TAGS
,EXTRA_START_TIME
iEXTRA_END_TIME
.
- Jeśli system wywoła funkcję
W zależności od tego, które filtry intencji dodasz, użytkownicy zobaczą ikonę informacji obok nazwy aplikacji na niektórych ekranach:
- Jeśli dodasz filtr intencji zawierający działanie
VIEW_PERMISSION_USAGE
, użytkownicy zobaczą ikonę na stronie uprawnień aplikacji w ustawieniach systemu. Możesz zastosować to działanie do wszystkich uprawnień w czasie działania. - Jeśli dodasz filtr intencji zawierający działanie
VIEW_PERMISSION_USAGE_FOR_PERIOD
, użytkownicy będą widzieć ikonę obok nazwy aplikacji za każdym razem, gdy pojawi się ona na ekranie panelu prywatności.
Gdy użytkownicy wybiorą tę ikonę, uruchomi się aktywność uzasadnienia aplikacji.
Wskaźniki
Gdy aplikacja na urządzeniu z Androidem 12 lub nowszym uzyskuje dostęp do mikrofonu lub aparatu, na pasku stanu pojawia się ikona. Jeśli aplikacja jest w trybie pełnoekranowym, ikona pojawi się w prawym górnym rogu ekranu. Użytkownicy mogą otworzyć Szybkie ustawienia i wybrać ikonę, aby sprawdzić, które aplikacje aktualnie korzystają z mikrofonu lub aparatu. Na ilustracji 2 widać przykładowy zrzut ekranu z ikonami.
Określanie położenia wskaźników na ekranie
Jeśli Twoja aplikacja obsługuje tryb pełnoekranowy lub interfejs pełnoekranowy, wskaźniki mogą na chwilę nakładać się na interfejs aplikacji. Aby ułatwić dostosowanie interfejsu do tych wskaźników, system wprowadza metodę getPrivacyIndicatorBounds()
, którą ilustruje poniższy fragment kodu. Za pomocą tego interfejsu API możesz określić granice, w których mogą się pojawiać wskaźniki. Możesz wtedy zdecydować się na inną organizację interfejsu ekranu.
Kotlin
view.setOnApplyWindowInsetsListener { view, windowInsets -> val indicatorBounds = windowInsets.getPrivacyIndicatorBounds() // change your UI to avoid overlapping windowInsets }
Przełączniki
Na obsługiwanych urządzeniach z Androidem 12 lub nowszym użytkownicy mogą włączać i wyłączać dostęp do aparatu i mikrofonu dla wszystkich aplikacji na urządzeniu, naciskając jeden przełącznik. Użytkownicy mogą uzyskać dostęp do opcji, które można włączać i wyłączać, w Szybkich ustawieniach, jak pokazano na rysunku 3, lub na ekranie Prywatność w ustawieniach systemu.
Przełączniki aparatu i mikrofonu mają wpływ na wszystkie aplikacje na urządzeniu:
- Gdy użytkownik wyłączy dostęp do kamery, Twoja aplikacja otrzyma pusty obraz z kamery.
Gdy użytkownik wyłączy dostęp do mikrofonu, aplikacja będzie otrzymywać cichy dźwięk. Dodatkowo czujniki ruchu podlegają ograniczeniu liczby odczytów, niezależnie od tego, czy zadeklarujesz uprawnienie
HIGH_SAMPLING_RATE_SENSORS
.
Gdy użytkownik wyłączy dostęp do aparatu lub mikrofonu, a następnie uruchomi aplikację, która potrzebuje dostępu do informacji z aparatu lub mikrofonu, system przypomni mu, że przełącznik na poziomie urządzenia jest wyłączony.
Sprawdzanie obsługi urządzenia
Aby sprawdzić, czy urządzenie obsługuje przełączniki mikrofonu i kamery, dodaj logikę widoczną w tym fragmencie kodu:
Kotlin
val sensorPrivacyManager = applicationContext .getSystemService(SensorPrivacyManager::class.java) as SensorPrivacyManager val supportsMicrophoneToggle = sensorPrivacyManager .supportsSensorToggle(Sensors.MICROPHONE) val supportsCameraToggle = sensorPrivacyManager .supportsSensorToggle(Sensors.CAMERA)
Java
SensorPrivacyManager sensorPrivacyManager = getApplicationContext() .getSystemService(SensorPrivacyManager.class); boolean supportsMicrophoneToggle = sensorPrivacyManager .supportsSensorToggle(Sensors.MICROPHONE); boolean supportsCameraToggle = sensorPrivacyManager .supportsSensorToggle(Sensors.CAMERA);