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

Aplikacje kierowane na Androida 13 (poziom interfejsu API 33) lub nowszego i zarządzające połączeniami Wi-Fi powinny prosić o uprawnienia do działania NEARBY_WIFI_DEVICES. Upoważnienie to ułatwia uzasadnienie dostępu aplikacji do urządzeń Wi-Fi w pobliżu. W poprzednich wersjach Androida aplikacje te musiały zadeklarować uprawnienie ACCESS_FINE_LOCATION.

Uprawnienia 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 również uprawnienia związane z Bluetoothem i łączem ultraszerokopasmowym. Gdy poprosisz o dowolną kombinację uprawnień z tej grupy, system wyświetli jedno okno dialogowe i prosi użytkownika o zatwierdzenie dostępu aplikacji do urządzeń w pobliżu. W ustawieniach systemu użytkownik musi włączyć i wyłączyć w grupie uprawnienia Urządzenia w pobliżu. Użytkownicy nie mogą np. wyłączyć dostępu do Wi-Fi, ale pozostawić włączony dostęp przez Bluetooth w przypadku danej aplikacji.

zdecydowanie twierdzić, że aplikacja nie określa lokalizacji fizycznej;

Jeśli kierujesz aplikację na Androida 13 lub nowszego, zastanów się, czy pozyskuje ona informacje o lokalizacji z interfejsów Wi-Fi API. W przeciwnym razie zdecydowanie zaznacz to. Aby to zrobić, ustaw atrybut usesPermissionFlags na neverForLocation w pliku manifestu aplikacji, jak pokazano w tym fragmencie kodu. Ten proces przebiega podobnie jak w przypadku zgłaszania, że informacje z urządzenia 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

Kilka interfejsów Wi-Fi API wymaga uprawnienia ACCESS_FINE_LOCATION, nawet jeśli aplikacja jest kierowana na Androida 13 lub nowszego. Oto przykłady metod z klasy WifiManager:

Poza tym uprawnienie NEARBY_WIFI_DEVICES jest dostępne tylko w Androidzie 13 i nowszych, dlatego zachowaj wszystkie deklaracje dotyczące aplikacji ACCESS_FINE_LOCATION, by zapewnić zgodność wsteczną aplikacji. Jeśli jednak Twoja aplikacja nie korzysta w inny sposób z dokładnych informacji o lokalizacji, możesz ustawić maksymalną wersję SDK tego uprawnienia na 32. Jak widać w tym fragmencie kodu:

<manifest ...>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"
                     android:maxSdkVersion="32" />
    <application ...>
        ...
    </application>
</manifest>

Znajdź interfejsy API, które wymagają tych uprawnień

Jeśli Twoja aplikacja jest kierowana na Androida w wersji 13 lub nowszej, musisz zadeklarować uprawnienie NEARBY_WIFI_DEVICES do wywoływania tych interfejsów API Wi-Fi:

Procesy dostępu do Wi-Fi

Rysunek 1 przedstawia proces 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 twierdzisz, ż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 pozwalający określić, czy aplikacja kierowana na Androida 13 (poziom interfejsu API 33) lub nowszego może uzyskać dostęp do informacji o sieciach Wi-Fi.

Rysunek 2 przedstawia proces dostępu do sieci Wi-Fi na urządzeniach z funkcją 12 L lub mniejszą. Zwróć uwagę na to, że używasz uprawnienia ACCESS_FINE_LOCATION.

Rysunek 2. Schemat blokowy pozwalający określić, czy aplikacja kierowana na wersję 12L (poziom interfejsu API 32) lub niższy może mieć dostęp do informacji o sieciach Wi-Fi.