Запросить разрешение на доступ к близлежащим устройствам Wi-Fi

Приложения для Android 13 (уровень API 33) или выше, управляющие подключениями Wi-Fi, должны запрашивать разрешение среды выполнения NEARBY_WIFI_DEVICES . Это разрешение упрощает обоснование доступа приложения к ближайшим устройствам Wi-Fi; в предыдущих версиях Android таким приложениям требовалось вместо этого запрашивать разрешение ACCESS_FINE_LOCATION .

Разрешение является частью группы устройств поблизости.

Разрешение NEARBY_WIFI_DEVICES входит в группу разрешений «Устройства поблизости» . Эта группа, добавленная в Android 12 (уровень API 31), также включает разрешения, связанные с Bluetooth и сверхширокополосной связью. При запросе любой комбинации разрешений из этой группы система отображает одно диалоговое окно выполнения и просит пользователя разрешить доступ вашего приложения к устройствам поблизости. В настройках системы пользователь должен включать и отключать разрешения « Устройства поблизости» как группу; например, пользователи не могут отключить доступ к Wi-Fi, но оставить доступ к Bluetooth для определённого приложения.

Настоятельно заявите, что ваше приложение не определяет физическое местоположение.

При выборе Android 13 или более поздней версии обратите внимание, получает ли ваше приложение данные о местоположении из API Wi-Fi. Если нет, вам следует настоятельно подтвердить это. Чтобы сделать это утверждение, установите для атрибута usesPermissionFlags значение neverForLocation в файле манифеста вашего приложения, как показано в следующем фрагменте кода. Этот процесс аналогичен тому, который вы используете, когда утверждаете, что информация об устройстве Bluetooth никогда не используется для определения местоположения :

<manifest ...>
    <uses-permission android:name="android.permission.NEARBY_WIFI_DEVICES"
                     android:usesPermissionFlags="neverForLocation" />
    <application ...>
        ...
    </application>
</manifest>

Предыдущие версии и некоторые API требуют разрешения на местоположение.

Некоторым API Wi-Fi требуется разрешение ACCESS_FINE_LOCATION , даже если ваше приложение предназначено для Android 13 и более поздних версий. Примерами служат следующие методы класса WifiManager :

Кроме того, поскольку разрешение NEARBY_WIFI_DEVICES доступно только на Android 13 и более поздних версиях, вам следует сохранить все объявления для ACCESS_FINE_LOCATION для обеспечения обратной совместимости в вашем приложении. Однако, если ваше приложение не использует точную информацию о местоположении , вы можете установить максимальную версию SDK для этого разрешения 32 , как показано в следующем фрагменте кода:

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

Проверьте наличие API, требующих разрешения.

Если ваше приложение предназначено для Android 13 или выше, необходимо объявить разрешение NEARBY_WIFI_DEVICES для вызова любого из следующих API Wi-Fi:

Рабочие процессы доступа Wi-Fi

На рисунке 1 показана схема доступа к Wi-Fi на устройствах под управлением Android 13 и выше для приложений, предназначенных для Android 13 и выше. Обратите внимание: если вы утверждаете, что ваше приложение не получает данные о физическом местоположении из информации об устройстве Wi-Fi, вам больше не нужно объявлять разрешение ACCESS_FINE_LOCATION :

Рисунок 1. Блок-схема для определения того, может ли приложение, предназначенное для Android 13 (уровень API 33) или выше, получить доступ к информации Wi-Fi.

На рисунке 2 показана схема доступа к Wi-Fi на устройствах с версией 12L или ниже. Обратите внимание на необходимость разрешения ACCESS_FINE_LOCATION .

Рисунок 2. Блок-схема для определения того, может ли приложение, ориентированное на версию 12L (уровень API 32) или ниже, получить доступ к информации Wi-Fi.