Richiedere l'autorizzazione ad accedere ai dispositivi Wi-Fi nelle vicinanze

App destinate ad Android 13 (livello API 33) o versioni successive che gestiscono le connessioni Wi-Fi deve richiedere NEARBY_WIFI_DEVICES autorizzazione di runtime. Questo che consente di giustificare più facilmente l'accesso di un'app ai dispositivi Wi-Fi nelle vicinanze. versioni precedenti di Android, queste app dovevano dichiarare ACCESS_FINE_LOCATION l'autorizzazione di accesso.

L'autorizzazione fa parte del gruppo di dispositivi nelle vicinanze

L'autorizzazione NEARBY_WIFI_DEVICES fa parte della sezione Dispositivi nelle vicinanze gruppo di autorizzazioni. Questo gruppo, aggiunto in Android 12 (livello API 31), include anche autorizzazioni relative al Bluetooth e alla banda ultralarga. Quando richiedi uno qualsiasi di autorizzazioni del gruppo di autorizzazioni, il sistema mostra finestra di dialogo di runtime e chiede all'utente di approvare l'accesso della tua app ai dispositivi nelle vicinanze. Nelle impostazioni di sistema, l'utente deve attivare e disattivare Dispositivi nelle vicinanze. autorizzazioni come gruppo; Ad esempio, gli utenti non possono disattivare l'accesso al Wi-Fi, ma mantenere Accesso al Bluetooth attivo per una determinata app.

Affermare con chiarezza che la tua app non ricava la posizione fisica

Se scegli come target Android 13 o versioni successive, valuta se la tua app ricava mai informazioni sulla posizione dalle API Wi-Fi; In caso contrario, dovresti vivamente di dichiararlo. Per creare questa asserzione, imposta l'attributo usesPermissionFlags su neverForLocation nel file manifest dell'app, come mostrato nel seguente codice snippet di codice. Questa procedura è simile a quella che segui quando Dichiara che le informazioni del dispositivo Bluetooth non vengono mai utilizzate per la geolocalizzazione:

<manifest ...>
    <uses-permission android:name="android.permission.NEARBY_WIFI_DEVICES"
                     android:usesPermissionFlags="neverForLocation" />
    <application ...>
        ...
    </application>
</manifest>

Le versioni precedenti e alcune API richiedono l'autorizzazione di accesso alla posizione

Diverse API Wi-Fi richiedono l'autorizzazione ACCESS_FINE_LOCATION, anche quando L'app ha come target Android 13 o versioni successive. Ecco alcuni esempi: metodi della classe WifiManager:

Inoltre, poiché l'autorizzazione NEARBY_WIFI_DEVICES è disponibile solo su Per Android 13 e versioni successive, devi conservare eventuali dichiarazioni per ACCESS_FINE_LOCATION per offrire la compatibilità con le versioni precedenti dell'app. Tuttavia, se la tua app non si basa in altro modo informazioni sulla posizione esatta, puoi imposta la versione massima dell'SDK di questa autorizzazione su 32, come mostrato in seguente snippet di codice:

<manifest ...>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"
                     android:maxSdkVersion="32" />
    <application ...>
        ...
    </application>
</manifest>

Verifica la presenza di API che richiedono l'autorizzazione

Se la tua app ha come target Android 13 o versioni successive, devi dichiarare Autorizzazione NEARBY_WIFI_DEVICES per chiamare una delle seguenti API Wi-Fi:

Flussi di lavoro per l'accesso al Wi-Fi

La figura 1 mostra il flusso di lavoro per l'accesso al Wi-Fi sui dispositivi che eseguono Android 13 o versioni successive per le app che hanno come target Android 13 o versioni successive. Ricorda che, se affermi che i tuoi app non ricava la posizione fisica dalle informazioni del dispositivo Wi-Fi, devi dichiarare più l'autorizzazione ACCESS_FINE_LOCATION:

Figura 1. Diagramma di flusso per stabilire se un'app ha come target Android 13 (livello API 33) o versioni successive possono accedere alle informazioni del Wi-Fi.

La figura 2 mostra il flusso di lavoro per l'accesso al Wi-Fi sui dispositivi che eseguono 12 litri o inferiore. Nota il fatto che si affidano Autorizzazione ACCESS_FINE_LOCATION.

Figura 2. Diagramma di flusso per determinare se un'app ha come target 12L (livello API 32) o un livello inferiore possono accedere alle informazioni del Wi-Fi.