Cómo solicitar permiso para acceder a dispositivos Wi-Fi cercanos

Apps orientadas a Android 13 (nivel de API 33) o versiones posteriores y que administran conexiones Wi-Fi debe solicitar el NEARBY_WIFI_DEVICES permiso de tiempo de ejecución. Esta permiso facilita la justificación del acceso de una aplicación a dispositivos Wi-Fi cercanos; en versiones anteriores de Android, estas aplicaciones debían declarar el ACCESS_FINE_LOCATION permiso 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 solicites combinación de permisos de este grupo de permisos, el sistema muestra una sola y le pide al usuario que apruebe el acceso de tu app a dispositivos cercanos. En la configuración del sistema, el usuario debe habilitar e inhabilitar los dispositivos cercanos. los permisos como grupo; Por ejemplo, los usuarios no pueden inhabilitar el acceso a Wi-Fi, pero mantener Acceso Bluetooth habilitado para una app determinada

Declara que la app no obtiene ubicación física

Cuando orientes tu app a Android 13 o versiones posteriores, considera si siempre obtiene información de ubicación de las API de Wi-Fi; Si no es así, deberías afirmar eso. 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 permiso de ubicación

Varias APIs de Wi-Fi requieren el permiso ACCESS_FINE_LOCATION, incluso cuando tu La app se orienta a Android 13 o versiones posteriores. Los siguientes son algunos ejemplos: de la clase WifiManager:

Además, debido a que el permiso NEARBY_WIFI_DEVICES solo está disponible en Android 13 y versiones posteriores, debes conservar las declaraciones de ACCESS_FINE_LOCATION para ofrecer retrocompatibilidad en tu app. Sin embargo, siempre que tu app no dependa de otro modo información de ubicación precisa, puedes establecer la versión máxima del SDK para 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:

Flujos de trabajo del acceso a Wi-Fi

La figura 1 muestra el flujo de trabajo de acceso a Wi-Fi en dispositivos que ejecutan Android 13 o versiones posteriores para apps orientadas 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:

Figura 1: Diagrama de flujo para determinar si una app se orienta a Android 13 (nivel de API 33) o versiones posteriores tenga acceso a la información de Wi-Fi.

La figura 2 muestra el flujo de trabajo de acceso a Wi-Fi en dispositivos que ejecutan 12L o versiones anteriores. Ten en cuenta que dependes del permiso ACCESS_FINE_LOCATION.

Figura 2: Diagrama de flujo para determinar si una app se orienta a la versión 12L (nivel de API 32) o versiones anteriores tenga acceso a la información de Wi-Fi.