Приложения для 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:
-
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
.