Aplikacje kierowane na Androida 13 (poziom interfejsu API 33) lub nowszego i zarządzające połączeniami Wi-Fi powinny prosić o uprawnienia środowiska wykonawczego NEARBY_WIFI_DEVICES
. To uprawnienie ułatwia uzasadnienie dostępu aplikacji do urządzeń Wi-Fi w pobliżu. W poprzednich wersjach Androida aplikacje te musiały zadeklarować uprawnienia ACCESS_FINE_LOCATION
.
Uprawnienia należą do grupy urządzeń w pobliżu
Uprawnienie NEARBY_WIFI_DEVICES
należy do grupy uprawnień Urządzenia w pobliżu. Ta grupa dodana w Androidzie 12 (poziom interfejsu API 31) obejmuje również uprawnienia związane z Bluetoothem i łączem ultraszerokopasmowym. Gdy poprosisz o dowolną kombinację uprawnień z tej grupy uprawnień, system wyświetli jedno okno środowiska wykonawczego i poprosi użytkownika o zatwierdzenie dostępu aplikacji do urządzeń w pobliżu.
W ustawieniach systemu użytkownik musi włączyć i wyłączyć uprawnienia Urządzenia w pobliżu jako grupa. Nie może na przykład wyłączyć dostępu do Wi-Fi, ale zachować dostęp przez Bluetooth dla danej aplikacji.
Stanowczo twierdź, że aplikacja nie określa lokalizacji fizycznej
Gdy kierujesz swoją aplikację na Androida 13 lub nowszego, zastanów się, czy aplikacja nie pobiera informacji o lokalizacji z interfejsów Wi-Fi API. Jeśli tak nie jest, musisz to zdecydowanie przyznać. Aby to potwierdzić, w pliku manifestu aplikacji ustaw wartość atrybutu usesPermissionFlags
na neverForLocation
, jak pokazano w tym fragmencie kodu. Ten proces przypomina oświadczanie, że informacje z urządzenia Bluetooth nigdy nie są używane do określania lokalizacji:
<manifest ...> <uses-permission android:name="android.permission.NEARBY_WIFI_DEVICES" android:usesPermissionFlags="neverForLocation" /> <application ...> ... </application> </manifest>
Poprzednie wersje i niektóre interfejsy API wymagają dostępu do lokalizacji
Kilka interfejsów API Wi-Fi wymaga uprawnienia ACCESS_FINE_LOCATION
, nawet jeśli Twoja aplikacja jest kierowana na Androida 13 lub nowszego. Przykłady obejmują te metody z klasy WifiManager
:
Poza tym uprawnienie NEARBY_WIFI_DEVICES
jest dostępne tylko na Androidzie 13 i nowszych, dlatego należy zachować wszelkie deklaracje dotyczące ACCESS_FINE_LOCATION
, aby zapewnić zgodność wsteczną w aplikacji. Jednak o ile Twoja aplikacja nie korzysta z dokładnych informacji o lokalizacji, możesz ustawić maksymalną wersję tego uprawnienia na 32
, jak widać w tym fragmencie kodu:
<manifest ...> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" android:maxSdkVersion="32" /> <application ...> ... </application> </manifest>
Wyszukaj interfejsy API, które wymagają tych uprawnień
Jeśli Twoja aplikacja jest kierowana na Androida 13 lub nowszego, musisz zadeklarować uprawnienia NEARBY_WIFI_DEVICES
do wywoływania tych interfejsów API Wi-Fi:
WifiManager
WifiAwareManager
WifiAwareSession
WifiP2pManager
WifiRttManager
Procesy dostępu do Wi-Fi
Rysunek 1 przedstawia przepływ pracy dotyczący dostępu do Wi-Fi na urządzeniach z Androidem 13 lub nowszym w przypadku aplikacji kierowanych na Androida 13 lub nowszego. Jeśli twierdzisz, że aplikacja nie określa fizycznej lokalizacji na podstawie informacji o urządzeniu Wi-Fi, nie musisz już deklarować uprawnień ACCESS_FINE_LOCATION
:
Rysunek 2 przedstawia proces uzyskiwania dostępu do sieci Wi-Fi na urządzeniach z zainstalowaną architekturą 12L lub mniejszą. Zwróć uwagę na znaczenie uprawnienia ACCESS_FINE_LOCATION
.