Приложения, ориентированные на Android 13 (уровень API 33) или выше и управляющие соединениями Wi-Fi, должны запрашивать разрешение среды выполнения NEARBY_WIFI_DEVICES
. Это разрешение упрощает обоснование доступа приложения к близлежащим устройствам Wi-Fi; в предыдущих версиях Android этим приложениям вместо этого требовалось объявлять разрешение ACCESS_FINE_LOCATION
.
Разрешение является частью группы устройств поблизости.
Разрешение NEARBY_WIFI_DEVICES
является частью группы разрешений Nearby devices . Эта группа, добавленная в Android 12 (уровень API 31), также включает разрешения, связанные с Bluetooth и сверхширокополосной связью. Когда вы запрашиваете любую комбинацию разрешений из этой группы разрешений, система показывает один диалог выполнения и просит пользователя одобрить доступ вашего приложения к близлежащим устройствам. В настройках системы пользователь должен включать и отключать разрешения Nearby devices как группу; например, пользователи не могут отключить доступ 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:
-
WifiManager
-
WifiAwareManager
-
WifiAwareSession
-
WifiP2pManager
-
WifiRttManager
Рабочие процессы доступа Wi-Fi
На рисунке 1 показан рабочий процесс доступа к Wi-Fi на устройствах под управлением Android 13 или выше для приложений, предназначенных для Android 13 или выше. Обратите внимание, что пока вы утверждаете, что ваше приложение не получает физическое местоположение из информации об устройстве Wi-Fi, вам больше не нужно объявлять разрешение ACCESS_FINE_LOCATION
:
Рисунок 2 показывает рабочий процесс доступа к Wi-Fi на устройствах, работающих на 12L или ниже. Обратите внимание на зависимость от разрешения ACCESS_FINE_LOCATION
.