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 starszych 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 łączem ultraszerokopasmowym. Gdy poprosisz o dowolną kombinację uprawnień z tej grupy uprawnień, 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 zadeklarować, 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>
Starsze 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. 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 aby zapewnić zgodność wsteczną aplikacji, zachowaj 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 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:
WifiManagerWifiAwareManagerWifiAwareSessionWifiP2pManagerWifiRttManager
Przepływy pracy związane z dostępem do Wi-Fi
Ilustracja 1 przedstawia proces uzyskiwania 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.