Demander l'autorisation d'accéder aux appareils Wi-Fi à proximité

Applications qui ciblent Android 13 (niveau d'API 33) ou version ultérieure et gèrent les connexions Wi-Fi doit demander NEARBY_WIFI_DEVICES autorisation d'exécution. Ce L'autorisation permet de justifier plus facilement l'accès d'une application aux appareils Wi-Fi à proximité. des versions précédentes d'Android, elles devaient déclarer ACCESS_FINE_LOCATION l'autorisation à la place.

L'autorisation fait partie du groupe d'appareils à proximité

L'autorisation NEARBY_WIFI_DEVICES fait partie de l'option Appareils à proximité d'autorisations. 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 de ce groupe d'autorisations, le système affiche une seule 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 la fonctionnalité Appareils à proximité. les autorisations en tant que groupe ; par exemple, les utilisateurs ne peuvent pas désactiver l'accès Wi-Fi, mais conserver Accès Bluetooth activé pour une application donnée.

Affirmez avec force que votre application ne détermine pas la position physique

Lorsque vous ciblez Android 13 ou une version ultérieure, déterminez si votre application extrait des informations de localisation à partir d'API Wi-Fi ; Si ce n'est pas le cas, vous devez fortement de l'affirmer. Pour effectuer cette assertion, définissez l'attribut usesPermissionFlags sur neverForLocation dans le fichier manifeste de votre application, comme indiqué dans le code suivant : extrait. Ce processus est similaire à celui que vous suivez lorsque vous affirmer que les informations de l'appareil 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 si votre l'application cible Android 13 ou version ultérieure. Voici quelques exemples : de la classe WifiManager:

De plus, comme 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 pour assurer la rétrocompatibilité dans votre application. Cependant, tant que votre application ne s'appuie pas autrement sur des informations de localisation précises, vous pouvez définissez la version maximale du SDK de 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 nécessitant l'autorisation

Si votre application cible Android 13 ou une version ultérieure, vous devez déclarer le Autorisation NEARBY_WIFI_DEVICES à appeler l'une des API Wi-Fi suivantes:

Workflows d'accès Wi-Fi

La figure 1 illustre le workflow d'accès Wi-Fi sur les appareils exécutant Android 13 ou version ultérieure, pour les applications qui ciblent Android 13 ou version ultérieure Notez que, tant que vous affirmez que votre application ne détermine pas la position géographique à partir des informations provenant des appareils Wi-Fi, vous ne devez pas déclarer l'autorisation ACCESS_FINE_LOCATION:

Figure 1. Organigramme Pour déterminer si une application cible Android 13 (niveau d'API 33) ou une version ultérieure peuvent accéder aux informations du réseau Wi-Fi.

La figure 2 illustre le workflow d'accès Wi-Fi sur les appareils exécutant 12L ou version antérieure. Notez l'importance Autorisation ACCESS_FINE_LOCATION.

Figure 2. Organigramme Pour déterminer si une application cible la version 12L (niveau d'API 32) ou une version antérieure peuvent accéder aux informations du réseau Wi-Fi.