Poproś o dostęp do urządzeń Wi-Fi w pobliżu

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:

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:

Rysunek 1. Schemat blokowy określający, czy aplikacja kierowana na Androida 13 (API na poziomie 33) lub nowszego może uzyskać dostęp do informacji o Wi-Fi.

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.

Rysunek 2. Schemat blokowy określający, czy aplikacja kierowana na Androida 12L (API na poziomie 32) lub starszego może uzyskać dostęp do informacji o Wi-Fi.