Приложения, которые предназначены для 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:
WifiManagerWifiAwareManagerWifiAwareSessionWifiP2pManagerWifiRttManager
Рабочие процессы доступа к Wi-Fi
На рисунке 1 показан рабочий процесс доступа к Wi-Fi на устройствах под управлением Android 13 или более поздней версии для приложений, предназначенных для Android 13 или более поздней версии. Обратите внимание, что если вы подтвердите, что ваше приложение не определяет физическое местоположение по информации об устройствах Wi-Fi, то вам больше не нужно будет запрашивать разрешение ACCESS_FINE_LOCATION.
На рисунке 2 показан рабочий процесс доступа к Wi-Fi на устройствах с Android 12L или более ранней версией. Обратите внимание на зависимость от разрешения ACCESS_FINE_LOCATION.