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

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 działania. 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ą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 Bluetooth i Ultra-wideband. Gdy poprosisz o dowolną kombinację uprawnień z tej grupy uprawnień, system wyświetli jedno okno środowiska wykonawczego 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 Bluetooth dla danej aplikacji.

Stanowczo oświadczasz, że Twoja aplikacja nie określa fizycznej lokalizacji

Gdy kierujesz swoją aplikację na Androida 13 lub nowszego, zastanów się, czy aplikacja nie pobiera informacji o lokalizacji z interfejsów Wi-Fi API. Jeśli tak nie jest, musisz to zdecydowanie przyznać. Aby to potwierdzić, w pliku manifestu aplikacji ustaw wartość atrybutu usesPermissionFlags na neverForLocation, jak pokazano w tym fragmencie kodu. Ten proces przypomina oświadczanie, ż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 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:

Workflows dotyczące dostępu do Wi-Fi

Rysunek 1 przedstawia przepływ pracy dotyczący 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 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 przepływu informacji umożliwiający określenie, czy aplikacja kierowana na Androida 13 (poziom interfejsu API 33) lub nowszego ma dostęp do informacji o Wi-Fi.

Rysunek 2 przedstawia proces uzyskiwania dostępu do sieci Wi-Fi na urządzeniach z zainstalowaną architekturą 12L lub mniejszą. Uwaga: ta funkcja wymaga uprawnienia ACCESS_FINE_LOCATION.

Rysunek 2. Schemat przepływu danych służący do określenia, czy aplikacja kierowana na 12L (poziom interfejsu API 32) lub niższą wersję może uzyskać dostęp do informacji o Wi-Fi.