Aplikacje kierowane na Androida 13 (poziom interfejsu API 33) lub nowszego i zarządzające połączeniami Wi-Fi powinny prosić o uprawnienia do działania NEARBY_WIFI_DEVICES
. Upoważnienie to ułatwia uzasadnienie dostępu aplikacji do urządzeń Wi-Fi w pobliżu. W poprzednich wersjach Androida aplikacje te musiały zadeklarować uprawnienie ACCESS_FINE_LOCATION
.
Uprawnienia należy 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, system wyświetli jedno okno dialogowe i prosi użytkownika o zatwierdzenie dostępu aplikacji do urządzeń w pobliżu.
W ustawieniach systemu użytkownik musi włączyć i wyłączyć w grupie uprawnienia Urządzenia w pobliżu. Użytkownicy nie mogą np. wyłączyć dostępu do Wi-Fi, ale pozostawić włączony dostęp przez Bluetooth w przypadku danej aplikacji.
zdecydowanie twierdzić, że aplikacja nie określa lokalizacji fizycznej;
Jeśli kierujesz aplikację na Androida 13 lub nowszego, zastanów się, czy pozyskuje ona informacje o lokalizacji z interfejsów Wi-Fi API. W przeciwnym razie zdecydowanie zaznacz to. Aby to zrobić, ustaw atrybut usesPermissionFlags
na neverForLocation
w pliku manifestu aplikacji, jak pokazano w tym fragmencie kodu. Ten proces przebiega podobnie jak w przypadku zgłaszania, ż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 Wi-Fi API wymaga uprawnienia ACCESS_FINE_LOCATION
, nawet jeśli aplikacja jest kierowana na Androida 13 lub nowszego. Oto przykłady metod z klasy WifiManager
:
Poza tym uprawnienie NEARBY_WIFI_DEVICES
jest dostępne tylko w Androidzie 13 i nowszych, dlatego zachowaj wszystkie deklaracje dotyczące aplikacji ACCESS_FINE_LOCATION
, by zapewnić zgodność wsteczną aplikacji. Jeśli jednak Twoja aplikacja nie korzysta w inny sposób z dokładnych informacji o lokalizacji, możesz ustawić maksymalną wersję SDK 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>
Znajdź interfejsy API, które wymagają tych uprawnień
Jeśli Twoja aplikacja jest kierowana na Androida w wersji 13 lub nowszej, musisz zadeklarować uprawnienie 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 proces dostępu do Wi-Fi na urządzeniach z Androidem 13 lub nowszym w przypadku aplikacji kierowanych na Androida 13 lub nowszego. Pamiętaj, że jeśli twierdzisz, że Twoja aplikacja nie określa lokalizacji fizycznej na podstawie informacji o urządzeniu Wi-Fi, nie musisz już deklarować uprawnienia ACCESS_FINE_LOCATION
:
Rysunek 2 przedstawia proces dostępu do sieci Wi-Fi na urządzeniach z funkcją 12 L lub mniejszą. Zwróć uwagę na to, że używasz uprawnienia ACCESS_FINE_LOCATION
.