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. 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.

Uprawnienia należą 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 Bluetoothem i Ultra-wideband. 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 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 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 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 niektórych interfejsach API wymagany jest dostęp 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:

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>

Sprawdź, czy interfejsy API wymagają uprawnienia

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:

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 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 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. Zwróć uwagę, że funkcja Uprawnienie ACCESS_FINE_LOCATION.

Rysunek 2. Schemat przepływu danych służący do określenia, czy aplikacja kierowana na interfejs API na poziomie 32 lub niższym ma dostęp do informacji o Wi-Fi.