Запросить разрешение на доступ к близлежащим устройствам 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. Блок-схема для определения того, может ли приложение, ориентированное на API уровня 12L или ниже, получать доступ к информации о Wi-Fi.