Android 10 (API na poziomie 29) wprowadza szereg funkcji i zmian w sposobie działania, które mają lepiej chronić prywatność użytkowników. Zmiany te zwiększają przejrzystość i kontrolę, jaką użytkownicy mają nad swoimi danymi, oraz możliwości, jakie dają aplikacjom. Te funkcje mogą oznaczać, że określone zachowania lub dane, na których polega Twoja aplikacja, mogą działać inaczej niż w starszych wersjach platformy. Jeśli Twoja aplikacja jest zgodna z aktualnymi sprawdzonymi metodami dotyczącymi obsługi danych użytkowników, wpływ tych zmian powinien być minimalny.
Na tej stronie znajdziesz podsumowanie każdej zmiany.
Najważniejsze zmiany
Ta sekcja zawiera najważniejsze zmiany w Androidzie 10 związane z prywatnością.
Dostęp do pamięci zewnętrznej ograniczony do plików i multimediów aplikacji
Domyślnie aplikacje kierowane na Androida 10 i nowsze wersje mają ograniczony dostęp do miejsca na dane do pamięci zewnętrznej, czyli ograniczony dostęp do miejsca na dane. Takie aplikacje mogą wyświetlać te typy plików na urządzeniu pamięci zewnętrznej bez konieczności proszenia o uprawnienia użytkownika związane z pamięcią:
- Pliki w katalogu specyficznym dla aplikacji, do których dostęp uzyskuje się za pomocą funkcji
getExternalFilesDir(). - Zdjęcia, filmy i klipy audio utworzone przez aplikację z biblioteki multimediów.
Więcej informacji o ograniczonym dostępie do pamięci oraz o tym, jak udostępniać, uzyskiwać dostęp do plików zapisanych na zewnętrznych urządzeniach pamięci i je modyfikować, znajdziesz w przewodnikach dotyczących zarządzania plikami w pamięci zewnętrznej oraz uzyskiwania dostępu do plików multimedialnych i ich modyfikowania.
Dostęp do lokalizacji urządzenia w tle wymaga uprawnień
Aby zapewnić użytkownikom większą kontrolę nad dostępem aplikacji do
informacji o lokalizacji, Android 10 wprowadza uprawnienie
ACCESS_BACKGROUND_LOCATION.
W przeciwieństwie do
ACCESS_FINE_LOCATION
i
ACCESS_COARSE_LOCATION
uprawnień, uprawnienie ACCESS_BACKGROUND_LOCATION wpływa tylko na
dostęp aplikacji do lokalizacji, gdy działa ona w tle. Aplikacja jest uznawana za uzyskującą dostęp do lokalizacji w tle, chyba że spełniony jest jeden z tych warunków:
- Widoczna jest aktywność należąca do aplikacji.
Aplikacja uruchamia usługę na pierwszym planie, która zadeklarowała typ usługi na pierwszym planie jako
location.Aby zadeklarować typ usługi na pierwszym planie w aplikacji, ustaw
targetSdkVersionlubcompileSdkVersionna29lub wyższy. Dowiedz się więcej o tym, jak usługi na pierwszym planie mogą kontynuować działania zainicjowane przez użytkownika które wymagają dostępu do lokalizacji.
Jeśli Twoja aplikacja tworzy i monitoruje geofence oraz
jest kierowana na Androida 10 (API na poziomie 29) lub nowszego, musisz zadeklarować
ACCESS_BACKGROUND_LOCATION uprawnienie.
Dostęp przyznawany automatycznie w przypadku kierowania na Androida 9 lub starszego
Jeśli Twoja aplikacja działa na Androidzie 10 lub nowszym, ale jest kierowana na Androida 9 (API na poziomie 28) lub starszego, platforma stosuje te zasady:
- Jeśli Twoja aplikacja deklaruje element
dla
ACCESS_FINE_LOCATIONlubACCESS_COARSE_LOCATION, system automatycznie dodaje element dlaACCESS_BACKGROUND_LOCATIONpodczas instalacji.<uses-permission><uses-permission> - Jeśli Twoja aplikacja prosi o
ACCESS_FINE_LOCATIONlubACCESS_COARSE_LOCATION, system automatycznie dodajeACCESS_BACKGROUND_LOCATIONdo żądania.
Dostęp po uaktualnieniu urządzenia do Androida 10
Jeśli użytkownik przyzna Twojej aplikacji dostęp do lokalizacji urządzenia –
ACCESS_COARSE_LOCATION
lub
ACCESS_FINE_LOCATION
– a następnie uaktualni urządzenie z Androida 9 do Androida 10,
system automatycznie zaktualizuje zestaw uprawnień opartych na lokalizacji przyznanych
Twojej aplikacji. Zestaw uprawnień, które otrzyma Twoja aplikacja po uaktualnieniu,
zależy od docelowej wersji pakietu SDK i zdefiniowanych uprawnień, jak pokazano w
tabeli poniżej:
Tabela 1. Zmiany stanu dostępu do lokalizacji po uaktualnieniu urządzenia do Androida 10
| Docelowa wersja platformy | Przyznano uprawnienia do dokładnej lub przybliżonej lokalizacji ? |
Uprawnienia do działania w tle zdefiniowane w pliku manifestu? |
Zaktualizowany domyślny stan uprawnień |
|---|---|---|---|
| Android 10 | Tak | Tak | Dostęp na pierwszym planie i dostęp w tle |
| Android 10 | Tak | Nie | Tylko dostęp na pierwszym planie |
| Android 10 | Nie | (Ignorowane przez system) | Brak dostępu |
| Android 9 lub starszy | Tak | Automatycznie dodane przez system podczas uaktualniania urządzenia | Dostęp na pierwszym planie i dostęp w tle |
| Android 9 lub starszy | Nie | (Ignorowane przez system) | Brak dostępu |
Pamiętaj, że użytkownik może zmienić ten poziom dostępu nawet po tym, jak system automatycznie zaktualizuje dostęp Twojej aplikacji do lokalizacji urządzenia. Użytkownik może na przykład ograniczyć dostęp Twojej aplikacji tylko do pierwszego planu lub całkowicie go cofnąć. Zanim spróbujesz uzyskać dostęp do lokalizacji urządzenia, zwłaszcza w usłudze na pierwszym planie, Twoja aplikacja powinna sprawdzić, czy użytkownik nadal zezwala na otrzymywanie tych informacji o lokalizacji.
Dostęp cofany podczas aktualizowania docelowego poziomu interfejsu API na urządzeniach z Androidem 10
Załóżmy, że Twoja aplikacja jest już zainstalowana na urządzeniu z Androidem 10. Jeśli w takiej sytuacji zaktualizujesz aplikację, aby była kierowana na Androida 10, urządzenie cofnie uprawnienie ACCESS_BACKGROUND_LOCATION.
Więcej informacji o tym, jak pobierać lokalizację urządzenia, gdy aplikacja działa w tle, znajdziesz w przewodniku dotyczącym otrzymywania okresowych aktualizacji lokalizacji.
Ograniczenia dotyczące uruchamiania aktywności w tle
Od Androida 10 system nakłada ograniczenia na uruchamianie aktywności w tle. Ta zmiana w sposobie działania pomaga zminimalizować przerwy dla użytkownika i zapewnia mu większą kontrolę nad tym, co jest wyświetlane na ekranie. Jeśli Twoja aplikacja uruchamia aktywności bezpośrednio w wyniku interakcji z użytkownikiem, najprawdopodobniej nie będzie ona objęta tymi ograniczeniami.
Więcej informacji o zalecanej alternatywie dla uruchamiania aktywności w tle znajdziesz w przewodniku dotyczącym informowania użytkowników o zdarzeniach wymagających szybkiego działania w aplikacji.
Identyfikatory i dane
Ta sekcja zawiera zmiany dotyczące pracy z identyfikatorami i danymi urządzeń.
Usunięcie powiązania z kontaktami
Od Androida 10 platforma nie śledzi informacji o powiązaniu z kontaktami. W rezultacie, jeśli Twoja aplikacja wyszukuje kontakty użytkownika, wyniki nie są uporządkowane według częstotliwości interakcji.
Przewodnik dotyczący ContactsProvider zawiera informację o konkretnych
polach i metodach, które są
przestarzałe na wszystkich urządzeniach
z Androidem 10.
Randomizacja adresu MAC
Na urządzeniach z Androidem 10 lub nowszym system domyślnie przesyła randomizowane adresy MAC.
Jeśli Twoja aplikacja obsługuje przypadek użycia w przedsiębiorstwie, platforma udostępnia interfejsy API do kilku operacji związanych z adresami MAC:
- Uzyskiwanie randomizowanego adresu MAC: aplikacje właściciela urządzenia i właściciela profilu
mogą pobrać randomizowany adres MAC przypisany do konkretnej sieci, wywołując funkcję
getRandomizedMacAddress(). - Uzyskiwanie rzeczywistego adresu MAC z ustawień fabrycznych: aplikacje właściciela urządzenia mogą pobrać
rzeczywisty adres MAC sprzętu urządzenia, wywołując funkcję
getWifiMacAddress(). Ta metoda jest przydatna do śledzenia flot urządzeń.
Ograniczenie dostępu do systemu plików /proc/net
Na urządzeniach z Androidem 10 lub nowszym aplikacje nie mogą uzyskiwać dostępu do /proc/net, który zawiera informacje o stanie sieci urządzenia. Aplikacje
które potrzebują dostępu do tych informacji, np. sieci VPN, powinny używać klasy
NetworkStatsManager lub
ConnectivityManager.
Ograniczenie dotyczące identyfikatorów urządzeń, których nie można zresetować
Od Androida 10 aplikacje muszą mieć uprawnienie uprzywilejowane READ_PRIVILEGED_PHONE_STATE, aby uzyskać dostęp do identyfikatorów urządzeń, których nie można zresetować, w tym do numeru IMEI i numeru seryjnego.
Dotyczy to tych metod:
BuildTelephonyManager
Jeśli Twoja aplikacja nie ma uprawnień i mimo to próbujesz uzyskać informacje o identyfikatorach, których nie można zresetować, odpowiedź platformy zależy od docelowej wersji pakietu SDK:
- Jeśli Twoja aplikacja jest kierowana na Androida 10 lub nowszego, a
SecurityExceptionwystąpi. - Jeśli Twoja aplikacja jest kierowana na Androida 9 (API na poziomie 28) lub starszego, metoda zwraca
nulllub dane zastępcze, jeśli aplikacja ma uprawnienieREAD_PHONE_STATE. W przeciwnym razie wystąpiSecurityException.
W wielu przypadkach użycia nie są potrzebne identyfikatory urządzeń, których nie można zresetować. Jeśli na przykład Twoja aplikacja używa identyfikatorów urządzeń, których nie można zresetować, do śledzenia reklam lub analizy użytkowników, użyj w tych konkretnych przypadkach użycia identyfikatora reklamowego Androida ID. Więcej informacji znajdziesz w artykule Sprawdzone metody stosowania unikalnych identyfikatorów.
Ograniczony dostęp do danych ze schowka
Jeśli Twoja aplikacja nie jest domyślnym edytorem metod wprowadzania (IME) ani aplikacją, która jest obecnie aktywna, nie może ona uzyskiwać dostępu do danych ze schowka na Androidzie 10 lub nowszym.
Ochrona numeru seryjnego urządzenia USB
Jeśli Twoja aplikacja jest kierowana na Androida 10 lub nowszego, nie może odczytać numeru seryjnego, dopóki użytkownik nie przyzna jej uprawnień dostępu do urządzenia lub akcesorium USB.
Aparat i łączność
Ta sekcja zawiera zmiany dotyczące metadanych aparatu i interfejsów API łączności.
Ograniczenie dostępu do szczegółów i metadanych aparatu
Android 10 zmienia zakres informacji, które domyślnie zwraca
getCameraCharacteristics()
metoda. Aby uzyskać dostęp do metadanych, które mogą być specyficzne dla urządzenia i są zawarte w wartości zwracanej przez tę metodę, Twoja aplikacja musi mieć uprawnienie
CAMERA.
Więcej informacji o tych zmianach znajdziesz w sekcji dotyczącej pól aparatu, które wymagają uprawnień.
Ograniczenie dotyczące włączania i wyłączania Wi-Fi
Aplikacje kierowane na Androida 10 lub nowszego nie mogą włączać ani wyłączać Wi-Fi. Metoda
WifiManager.setWifiEnabled()
zawsze zwraca wartość false.
Jeśli chcesz wyświetlać użytkownikom prośby o włączenie i wyłączenie Wi-Fi, użyj panelu ustawień.
Ograniczenia dotyczące bezpośredniego dostępu do skonfigurowanych sieci Wi-Fi
Aby chronić prywatność użytkowników, ręczna konfiguracja listy sieci Wi-Fi jest ograniczona do aplikacji systemowych i kontrolerów zasad dotyczących urządzeń (DPC). Dany DPC może być właścicielem urządzenia lub właścicielem profilu.
Jeśli Twoja aplikacja jest kierowana na Androida 10 lub nowszego i nie jest aplikacją systemową ani DPC, te metody nie zwracają przydatnych danych:
Metoda
getConfiguredNetworks()zawsze zwraca pustą listę.Każda metoda operacji sieciowej, która zwraca wartość całkowitą –
addNetwork()iupdateNetwork()–zawsze zwraca wartość -1.Każda operacja sieciowa, która zwraca wartość logiczną —
removeNetwork(),reassociate(),enableNetwork(),disableNetwork(),reconnect(), idisconnect()—zawsze zwraca wartośćfalse.
Jeśli Twoja aplikacja musi łączyć się z sieciami Wi-Fi, użyj tych alternatywnych metod:
- Aby wywołać natychmiastowe połączenie lokalne z siecią Wi-Fi, użyj
WifiNetworkSpecifierw standardowymNetworkRequestobiekcie. - Aby dodać sieci Wi-Fi, które mają być brane pod uwagę przy zapewnianiu użytkownikowi dostępu do internetu,
użyj
WifiNetworkSuggestionobiektów. Możesz dodawać i usuwać sieci, które pojawiają się w oknie wyboru sieci do automatycznego łączenia, wywołując odpowiednio metodyaddNetworkSuggestions()iremoveNetworkSuggestions(), . Te metody nie wymagają żadnych uprawnień do lokalizacji.
Niektóre interfejsy API połączeń telefonicznych, Bluetootha i Wi-Fi wymagają uprawnień do dokładnej lokalizacji
Jeśli Twoja aplikacja jest kierowana na Androida 10 lub nowszego, musi mieć uprawnienie
ACCESS_FINE_LOCATION
, aby móc korzystać z kilku metod w interfejsach API Wi-Fi, Wi-Fi Aware,
lub Bluetooth. W kolejnych sekcjach znajdziesz listę klas i metod, których to dotyczy.
Połączenia telefoniczne
TelephonyManagergetCellLocation()getAllCellInfo()requestNetworkScan()requestCellInfoUpdate()getAvailableNetworks()getServiceState()
TelephonyScanManagerrequestNetworkScan()
TelephonyScanManager.NetworkScanCallbackonResults()
PhoneStateListeneronCellLocationChanged()onCellInfoChanged()onServiceStateChanged()
Wi-Fi
WifiManagerstartScan()getScanResults()getConnectionInfo()getConfiguredNetworks()
WifiAwareManagerWifiP2pManagerWifiRttManager
Bluetooth
BluetoothAdapterstartDiscovery()startLeScan()
BluetoothAdapter.LeScanCallbackBluetoothLeScannerstartScan()
Uprawnienia
Ta sekcja zawiera informacje o aktualizacjach modelu uprawnień Androida.
Ograniczony dostęp do zawartości ekranu
Aby chronić zawartość ekranu użytkowników, Android 10 uniemożliwia cichy dostęp do zawartości ekranu urządzenia, zmieniając zakres uprawnień READ_FRAME_BUFFER, CAPTURE_VIDEO_OUTPUT i CAPTURE_SECURE_VIDEO_OUTPUT. Od Androida 10 te uprawnienia są
dostępne tylko dla aplikacji z podpisem.
Aplikacje, które potrzebują dostępu do zawartości ekranu urządzenia, powinny używać interfejsu
MediaProjection
API, który wyświetla prośbę o zgodę użytkownika.
Sprawdzanie uprawnień w starszych aplikacjach
Jeśli Twoja aplikacja jest kierowana na Androida 5.1 (poziom API 22) lub starszego, użytkownicy zobaczą ekran uprawnień, gdy po raz pierwszy użyją Twojej aplikacji na urządzeniu z Androidem 10 lub nowszym, jak pokazano na ilustracji 1. Ten ekran umożliwia użytkownikom cofnięcie dostępu do uprawnień, które system wcześniej przyznał Twojej aplikacji podczas instalacji.
Rozpoznawanie aktywności fizycznej
Android 10 wprowadza uprawnienie czasu działania
android.permission.ACTIVITY_RECOGNITION
dla aplikacji, które muszą wykrywać liczbę kroków użytkownika lub
klasyfikować jego aktywność fizyczną, np. chodzenie, jazdę na rowerze lub poruszanie się
pojazdem. Ma to na celu zapewnienie użytkownikom wglądu w sposób wykorzystywania danych z czujników urządzenia w Ustawieniach.
Niektóre biblioteki w ramach Usług Google Play, np. interfejs Activity Recognition API i Google Fit API, nie udostępniają wyników, dopóki użytkownik nie przyzna Twojej aplikacji tego uprawnienia.
Jedynymi wbudowanymi czujnikami na urządzeniu, które wymagają zadeklarowania tego uprawnienia, są czujniki licznika kroków i detektora kroków.
Jeśli Twoja aplikacja jest kierowana na Androida 9 (API na poziomie 28) lub starszego, system automatycznie przyznaje jej uprawnienie android.permission.ACTIVITY_RECOGNITION, jeśli spełnia ona wszystkie te warunki:
- Plik manifestu zawiera uprawnienie
com.google.android.gms.permission.ACTIVITY_RECOGNITION. - Plik manifestu nie zawiera uprawnienia
android.permission.ACTIVITY_RECOGNITION.
Jeśli system automatycznie przyzna uprawnienie android.permission.ACTIVITY_RECOGNITION, Twoja aplikacja zachowa je po zaktualizowaniu jej do Androida 10. Użytkownik może jednak w każdej chwili cofnąć to uprawnienie w ustawieniach systemowych.
Grupy uprawnień usunięte z interfejsu
Od Androida 10 aplikacje nie mogą sprawdzać, jak uprawnienia są pogrupowane w interfejsie.