Las apps que se orientan a Android 13 (nivel de API 33) o versiones posteriores y administran conexiones Wi-Fi deben solicitar el permiso de tiempo de ejecución NEARBY_WIFI_DEVICES
. Este permiso facilita la justificación del acceso de una app a dispositivos Wi-Fi cercanos; en versiones anteriores de Android, estas apps debían declarar el permiso ACCESS_FINE_LOCATION
en su lugar.
El permiso forma parte del grupo de dispositivos cercanos
El permiso NEARBY_WIFI_DEVICES
forma parte del grupo de permisos de dispositivos cercanos. Este grupo, que se agregó en Android 12 (nivel de API 31), también incluye permisos que se relacionan con Bluetooth y la banda ultraancha. Cuando solicitas cualquier combinación de permisos de este grupo de permisos, el sistema muestra un solo diálogo de tiempo de ejecución y le solicita al usuario que apruebe el acceso de la app a dispositivos cercanos.
En la configuración del sistema, el usuario debe habilitar e inhabilitar los permisos de dispositivos cercanos como un grupo; por ejemplo, los usuarios no pueden inhabilitar el acceso a Wi-Fi, pero pueden mantener el acceso a Bluetooth habilitado para una app determinada.
Declara que la app no obtiene ubicación física
Cuando te orientes a Android 13 o versiones posteriores, considera si tu app obtiene información de la ubicación de las APIs de Wi-Fi; si no es así, debes declararlo. Para realizar esta aserción, establece el atributo usesPermissionFlags
en neverForLocation
en el archivo de manifiesto de tu app, como se muestra en el siguiente fragmento de código. Este proceso es similar al que realizas cuando declaras que la información del dispositivo Bluetooth nunca se usa para la ubicación:
<manifest ...> <uses-permission android:name="android.permission.NEARBY_WIFI_DEVICES" android:usesPermissionFlags="neverForLocation" /> <application ...> ... </application> </manifest>
Las versiones anteriores y algunas APIs requieren el permiso de ubicación
Varias APIs de Wi-Fi requieren el permiso ACCESS_FINE_LOCATION
, incluso cuando tu app se orienta a Android 13 o versiones posteriores. Los ejemplos incluyen los siguientes métodos de la clase WifiManager
:
Además, como el permiso NEARBY_WIFI_DEVICES
solo está disponible en Android 13 y versiones posteriores, debes conservar todas las declaraciones para ACCESS_FINE_LOCATION
para proporcionar compatibilidad con versiones anteriores en tu app. Sin embargo, siempre que tu app no dependa de información de ubicación precisa, puedes establecer la versión máxima del SDK de este permiso en 32
, como se muestra en el siguiente fragmento de código:
<manifest ...> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" android:maxSdkVersion="32" /> <application ...> ... </application> </manifest>
Verifica si hay APIs que requieran el permiso
Si tu app se orienta a Android 13 o versiones posteriores, debes declarar el permiso NEARBY_WIFI_DEVICES
para llamar a cualquiera de las siguientes API de Wi-Fi:
WifiManager
WifiAwareManager
WifiAwareSession
WifiP2pManager
WifiRttManager
Flujos de trabajo del acceso a Wi-Fi
En la Figura 1, se muestra el flujo de trabajo de acceso a Wi-Fi en dispositivos que ejecutan Android 13 o versiones posteriores para apps que se orientan a Android 13 o versiones posteriores. Ten en cuenta que, siempre que declares que tu app no obtiene la ubicación física de la información del dispositivo de Wi-Fi, ya no es necesario declarar el permiso ACCESS_FINE_LOCATION
:
En la Figura 2, se muestra el flujo de trabajo de acceso a Wi-Fi en dispositivos que ejecutan la versión 12L o versiones anteriores. Ten en cuenta que dependes del permiso ACCESS_FINE_LOCATION
.