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 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 Bluetooth 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:

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 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 Wi-Fi na urządzeniach z systemem Android 12L lub starszym. 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.