Aplikacje kierowane na Androida 13 (API na poziomie 33) lub nowszego, które zarządzają połączeniami Wi-Fi, powinny prosić o NEARBY_WIFI_DEVICES
uprawnienia w czasie działania. To uprawnienie ułatwia uzasadnienie dostępu aplikacji do urządzeń Wi-Fi w pobliżu. W poprzednich wersjach Androida aplikacje te musiały deklarować uprawnienie ACCESS_FINE_LOCATION
.
Uprawnienie 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 (API na poziomie 31), obejmuje też uprawnienia związane z Bluetooth i ultraszerokopasmowym połączeniem. Gdy poprosisz o dowolną kombinację uprawnień z tej grupy, system wyświetli jedno okno dialogowe w czasie działania i poprosi użytkownika o zatwierdzenie dostępu aplikacji do urządzeń w pobliżu.
W ustawieniach systemowych użytkownik musi włączać i wyłączać uprawnienia Urządzenia w pobliżu
jako grupę. Nie może na przykład wyłączyć dostępu do Wi-Fi, ale zachować włączony dostęp do Bluetootha w przypadku danej aplikacji.
Zdecydowanie oświadcz, że Twoja aplikacja nie określa lokalizacji fizycznej
Jeśli kierujesz aplikację na Androida 13 lub nowszego, zastanów się, czy kiedykolwiek uzyskuje ona informacje o lokalizacji z interfejsów API Wi-Fi. Jeśli nie, zdecydowanie to potwierdź. Aby to zrobić, ustaw atrybut usesPermissionFlags
na neverForLocation
w pliku manifestu aplikacji, jak pokazano w tym fragmencie kodu: Ten proces jest podobny do tego, który wykonujesz, gdy potwierdzasz, że informacje o urządzeniu 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>
Wcześniejsze wersje i niektóre interfejsy API wymagają uprawnień do lokalizacji
Kilka interfejsów API Wi-Fi wymaga uprawnienia ACCESS_FINE_LOCATION
, nawet jeśli aplikacja jest kierowana na Androida 13 lub nowszego. Przykłady: te metody z klasy WifiManager
:
Poza tym uprawnienie NEARBY_WIFI_DEVICES
jest dostępne tylko na Androidzie 13 i nowszych wersjach, więc w celu zapewnienia wstecznej zgodności aplikacji należy zachować deklaracje dotyczące ACCESS_FINE_LOCATION
. Jeśli jednak aplikacja nie korzysta z dokładnych informacji o lokalizacji, możesz ustawić maksymalną wersję pakietu SDK dla tego uprawnienia na 32
, jak pokazano w tym fragmencie kodu:
<manifest ...> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" android:maxSdkVersion="32" /> <application ...> ... </application> </manifest>
Sprawdzanie interfejsów API, które wymagają uprawnień
Jeśli Twoja aplikacja jest kierowana na Androida 13 lub nowszego, musisz zadeklarować uprawnienie NEARBY_WIFI_DEVICES
, aby wywoływać dowolny z tych interfejsów API Wi-Fi:
WifiManager
WifiAwareManager
WifiAwareSession
WifiP2pManager
WifiRttManager
Procesy dostępu do Wi-Fi
Ilustracja 1 przedstawia proces dostępu do Wi-Fi na urządzeniach z Androidem 13 lub nowszym w przypadku aplikacji, które są przeznaczone na Androida 13 lub nowszego. Pamiętaj, że jeśli oświadczysz, że Twoja aplikacja nie określa lokalizacji fizycznej na podstawie informacji o urządzeniu Wi-Fi, nie musisz już deklarować uprawnienia ACCESS_FINE_LOCATION
:
Ilustracja 2 przedstawia proces uzyskiwania dostępu do Wi-Fi na urządzeniach z Androidem 12L lub starszym. Zwróć uwagę na zależność od uprawnienia ACCESS_FINE_LOCATION
.