Aplikacje kierowane na Androida 13 (poziom API 33) lub nowszego, które zarządzają połączeniami Wi-Fi, powinny prosić o NEARBY_WIFI_DEVICES
uprawnienia w czasie wykonywania. To uprawnienie ułatwia uzasadnienie dostępu aplikacji do urządzeń Wi-Fi w pobliżu. W poprzednich wersjach Androida te aplikacje musiały zamiast tego 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 (poziom interfejsu API 31), obejmuje też uprawnienia związane z Bluetoothem i Ultra-wideband. Gdy żądasz jakiejkolwiek kombinacji uprawnień z tej grupy uprawnień, system wyświetla jedno okno dialogowe w czasie działania aplikacji i prosi 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 Bluetooth dla danej aplikacji.
Potwierdź, że Twoja aplikacja nie określa fizycznej lokalizacji
Jeśli kierujesz aplikację na Androida 13 lub nowszego, zastanów się, czy aplikacja w ogóle uzyskuje informacje o lokalizacji z interfejsów API Wi-Fi. Jeśli nie, zdecydowanie to oświadcz. Aby to zrobić, w pliku manifestu aplikacji ustaw atrybut usesPermissionFlags
na neverForLocation
, 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>
W poprzednich wersjach i w przypadku niektórych interfejsów API wymagany jest dostęp do lokalizacji
Kilka interfejsów API Wi-Fi wymaga uprawnienia ACCESS_FINE_LOCATION
, nawet jeśli aplikacja jest kierowana na Androida 13 lub nowszego. Oto przykłady metod z klasy WifiManager
:
Ponieważ uprawnienie NEARBY_WIFI_DEVICES
jest dostępne tylko na Androidzie 13 i nowszych, aby zapewnić zgodność wsteczną w aplikacji, zachowaj deklaracje dla 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>
Sprawdź, czy interfejsy API wymagają uprawnienia
Jeśli Twoja aplikacja jest kierowana na Androida 13 lub nowszego, musisz zadeklarować uprawnienie
NEARBY_WIFI_DEVICES
, aby wywołać którykolwiek z tych interfejsów API Wi-Fi:
WifiManager
WifiAwareManager
WifiAwareSession
WifiP2pManager
WifiRttManager
Workflows dotyczące dostępu do Wi-Fi
Rysunek 1 przedstawia proces uzyskiwania dostępu do Wi-Fi na urządzeniach z Androidem 13 lub nowszym w przypadku aplikacji przeznaczonych 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
:
Rysunek 2 przedstawia proces uzyskiwania dostępu do Wi-Fi na urządzeniach z systemem Android 12L lub starszym. Uwaga: ta funkcja wymaga uprawnienia ACCESS_FINE_LOCATION
.