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 aplikacji. To uprawnienie ułatwia uzasadnienie dostępu aplikacji do urządzeń Wi-Fi w pobliżu. W poprzednich wersjach Androida te aplikacje musiały deklarować uprawnienie ACCESS_FINE_LOCATION.
Uprawnienie należy do grupy Urządzenia 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 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 czasu działania i poprosi użytkownika o zatwierdzenie dostępu aplikacji do Urządzeń w pobliżu.
W ustawieniach systemowych użytkownik musi włączyć i wyłączyć uprawnienia Urządzenia w pobliżu jako grupę. Na przykład użytkownicy nie mogą wyłączyć dostępu do Wi-Fi, ale pozostawić włączony dostęp do Bluetootha w przypadku danej aplikacji.
Zdecydowanie potwierdź, że aplikacja nie określa lokalizacji fizycznej
Jeśli kierujesz aplikację na Androida 13 lub nowszego, zastanów się, czy kiedykolwiek pobiera ona informacje o lokalizacji z interfejsów API Wi-Fi. Jeśli nie, zdecydowanie zalecamy, aby to zadeklarować. 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>
Poprzednie wersje i niektóre interfejsy API wymagają dostępu do lokalizacji.
Niektóre interfejsy API Wi-Fi wymagają uprawnień ACCESS_FINE_LOCATION, nawet jeśli aplikacja jest kierowana na Androida 13 lub nowszego. Przykłady obejmują te metody z klasy WifiManager:
Ponieważ uprawnienie NEARBY_WIFI_DEVICES jest dostępne tylko na Androidzie 13 i nowszych, należy zachować wszystkie deklaracje ACCESS_FINE_LOCATION, aby zapewnić zgodność wsteczną aplikacji. 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ć te interfejsy API Wi-Fi:
WifiManagerWifiAwareManagerWifiAwareSessionWifiP2pManagerWifiRttManager
Przepływy pracy związane z dostępem do Wi-Fi
Rysunek 1 przedstawia proces uzyskiwania 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 zadeklarujesz, ż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 przepływ pracy związany z dostępem do Wi-Fi na urządzeniach z Androidem 12L lub starszym. Zwróć uwagę na zależność od uprawnienia ACCESS_FINE_LOCATION.