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 powinien poprosić o NEARBY_WIFI_DEVICES uprawnienia środowiska wykonawczego. Ten ułatwia uzasadnienie dostępu aplikacji do urządzeń Wi-Fi w pobliżu; na poprzednich wersjach Androida, aplikacje te musiały zadeklarować ACCESS_FINE_LOCATION

Uprawnienia należą do grupy urządzeń w pobliżu

Uprawnienie NEARBY_WIFI_DEVICES jest częścią Urządzeń w pobliżu grupę uprawnień. Ta grupa dodana w Androidzie 12 (poziom interfejsu API 31) obejmuje również uprawnienia związane z Bluetoothem i połączeniem ultraszerokopasmowym. Gdy poprosisz o z kombinacją uprawnień z tej grupy, system wyświetla jeden w środowisku wykonawczym 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ć Urządzenia w pobliżu uprawnienia jako grupy, na przykład użytkownicy nie mogą wyłączyć dostępu do sieci Wi-Fi, ale zachować Włączono dostęp do Bluetootha dla danej aplikacji.

Stanowczo twierdź, że aplikacja nie określa lokalizacji fizycznej

Kierując reklamy na Androida 13 lub nowszego, zastanów się, czy Twoja aplikacja pobiera informacje o lokalizacji z interfejsów Wi-Fi API; jeśli nie, zdecydowanie twierdzić to. Aby dodać to potwierdzenie, ustaw atrybut usesPermissionFlags na neverForLocation w pliku manifestu aplikacji, jak pokazano w tym kodzie . Ten proces jest podobny do procedury deklarować, ż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 jest kierowana na Androida 13 lub nowszego. Przykłady: z klasy WifiManager:

Ponadto, ponieważ uprawnienie NEARBY_WIFI_DEVICES jest dostępne tylko na Androida 13 lub nowszego, zachowaj wszystkie deklaracje dotyczące ACCESS_FINE_LOCATION. aby zapewnić zgodność wsteczną w aplikacji. Jeśli jednak Twoja aplikacja nie polega w inny sposób na dokładne informacje o lokalizacji, ustaw maksymalną wersję pakietu SDK tego uprawnienia na 32, zgodnie z ten fragment kodu:

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

Wyszukaj interfejsy API, które wymagają tych uprawnień

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

Procesy dostępu do Wi-Fi

Ilustracja 1 przedstawia proces uzyskiwania dostępu do Wi-Fi na urządzeniach, na których działają urządzenia Androida 13 lub nowszego w przypadku aplikacji kierowanych Androida w wersji 13 lub nowszej. Pamiętaj, że o ile deklarujesz, że Twoje aplikacja nie określa fizycznej lokalizacji na podstawie informacji z urządzenia Wi-Fi, muszą już zadeklarować uprawnienia ACCESS_FINE_LOCATION:

Rysunek 1. Schemat blokowy aby określić, czy aplikacja jest kierowana na Androida 13 (poziom API 33) lub nowszego może uzyskać dostęp do informacji o sieci Wi-Fi.

Rysunek 2 przedstawia proces uzyskiwania dostępu do Wi-Fi na urządzeniach, na których działają urządzenia 12 l lub mniej. Zwróć uwagę, że funkcja Uprawnienie ACCESS_FINE_LOCATION.

Rysunek 2. Schemat blokowy aby określić, czy aplikacja jest kierowana na wersję 12L (poziom API 32) czy niższy może uzyskać dostęp do informacji o sieci Wi-Fi.