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 środowiska wykonawczego NEARBY_WIFI_DEVICES. To uprawnienie ułatwia uzasadnienie dostępu aplikacji do urządzeń Wi-Fi w pobliżu. W poprzednich wersjach Androida aplikacje te musiały zadeklarować uprawnienia 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 również uprawnienia związane z Bluetoothem i łączem ultraszerokopasmowym. 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 systemu użytkownik musi włączyć i wyłączyć uprawnienia Urządzenia w pobliżu jako grupa. Nie może na przykład wyłączyć dostępu do Wi-Fi, ale zachować dostęp przez Bluetooth dla danej aplikacji.

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

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 Twoja aplikacja jest kierowana na Androida 13 lub nowszego. Przykłady obejmują te metody z klasy WifiManager:

Poza tym uprawnienie NEARBY_WIFI_DEVICES jest dostępne tylko na Androidzie 13 i nowszych, dlatego należy zachować wszelkie deklaracje dotyczące ACCESS_FINE_LOCATION, aby zapewnić zgodność wsteczną w aplikacji. Jednak o ile Twoja aplikacja nie korzysta z dokładnych informacji o lokalizacji, możesz ustawić maksymalną wersję 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>

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

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

Procesy 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. Jeśli twierdzisz, że aplikacja nie określa fizycznej lokalizacji na podstawie informacji o urządzeniu Wi-Fi, nie musisz już deklarować uprawnień ACCESS_FINE_LOCATION:

Rysunek 1. Schemat blokowy pokazujący, czy aplikacja kierowana na Androida 13 (poziom interfejsu API 33) lub nowszego może uzyskiwać dostęp do informacji o sieci Wi-Fi.

Rysunek 2 przedstawia proces uzyskiwania dostępu do sieci Wi-Fi na urządzeniach z zainstalowaną architekturą 12L lub mniejszą. Zwróć uwagę na znaczenie uprawnienia ACCESS_FINE_LOCATION.

Rysunek 2. Schemat blokowy pokazujący, czy aplikacja przeznaczona na pakiet 12L (poziom API 32) lub niższy może uzyskiwać dostęp do informacji o sieci Wi-Fi.