Les applications qui ciblent Android 13 (niveau d'API 33) ou version ultérieure et qui gèrent les connexions Wi-Fi doivent demander l'autorisation d'exécution NEARBY_WIFI_DEVICES
. Cette autorisation permet de justifier plus facilement l'accès d'une application aux appareils Wi-Fi à proximité. Sur les versions précédentes d'Android, ces applications devaient déclarer l'autorisation ACCESS_FINE_LOCATION
à la place.
L'autorisation fait partie du groupe "Appareils à proximité"
L'autorisation NEARBY_WIFI_DEVICES
fait partie du groupe d'autorisations Appareils à proximité. Ce groupe, ajouté dans Android 12 (niveau d'API 31), inclut également les autorisations liées au Bluetooth et à la bande ultralarge. Lorsque vous demandez une combinaison d'autorisations de ce groupe, le système affiche une seule boîte de dialogue d'exécution et demande à l'utilisateur d'approuver l'accès de votre application aux appareils à proximité.
Dans les paramètres système, l'utilisateur doit activer et désactiver les autorisations Appareils à proximité en tant que groupe. Par exemple, les utilisateurs ne peuvent pas désactiver l'accès au Wi-Fi tout en conservant l'accès au Bluetooth activé pour une application donnée.
Affirmer fermement que votre application ne déduit pas la position physique
Lorsque vous ciblez Android 13 ou version ultérieure, déterminez si votre application dérive des informations de localisation à partir des API Wi-Fi. Si ce n'est pas le cas, vous devez l'affirmer clairement. Pour faire cette assertion, définissez l'attribut usesPermissionFlags
sur neverForLocation
dans le fichier manifeste de votre application, comme indiqué dans l'extrait de code suivant. Ce processus est semblable à celui que vous effectuez lorsque vous affirmez que les informations sur les appareils Bluetooth ne sont jamais utilisées pour la localisation :
<manifest ...> <uses-permission android:name="android.permission.NEARBY_WIFI_DEVICES" android:usesPermissionFlags="neverForLocation" /> <application ...> ... </application> </manifest>
Les versions précédentes et certaines API nécessitent l'autorisation d'accéder à la position
Plusieurs API Wi-Fi nécessitent l'autorisation ACCESS_FINE_LOCATION
, même lorsque votre application cible Android 13 ou version ultérieure. Voici quelques exemples de méthodes de la classe WifiManager
:
De plus, étant donné que l'autorisation NEARBY_WIFI_DEVICES
n'est disponible que sur Android 13 et versions ultérieures, vous devez conserver toutes les déclarations pour ACCESS_FINE_LOCATION
afin d'assurer la rétrocompatibilité dans votre application. Toutefois, tant que votre application ne repose pas sur des informations de localisation précises, vous pouvez définir la version maximale du SDK pour cette autorisation sur 32
, comme indiqué dans l'extrait de code suivant :
<manifest ...> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" android:maxSdkVersion="32" /> <application ...> ... </application> </manifest>
Rechercher les API qui nécessitent l'autorisation
Si votre application cible Android 13 ou version ultérieure, vous devez déclarer l'autorisation NEARBY_WIFI_DEVICES
pour appeler l'une des API Wi-Fi suivantes :
WifiManager
WifiAwareManager
WifiAwareSession
WifiP2pManager
WifiRttManager
Workflows d'accès au Wi-Fi
La figure 1 montre le workflow d'accès au Wi-Fi sur les appareils exécutant Android 13 ou version ultérieure, pour les applications ciblant Android 13 ou version ultérieure. Notez que tant que vous affirmez que votre application ne déduit pas la position physique à partir des informations sur les appareils Wi-Fi, vous n'avez plus besoin de déclarer l'autorisation ACCESS_FINE_LOCATION
:
La figure 2 montre le workflow d'accès au Wi-Fi sur les appareils exécutant 12L ou version antérieure. Notez la dépendance à l'autorisation ACCESS_FINE_LOCATION
.