Le app destinate ad Android 13 (livello API 33) o versioni successive che gestiscono le connessioni Wi-Fi devono richiedere l'autorizzazione di runtime NEARBY_WIFI_DEVICES
. Questa
autorizzazione consente di giustificare più facilmente l'accesso di un'app ai dispositivi Wi-Fi nelle vicinanze;
nelle versioni precedenti di Android, queste app dovevano invece dichiarare
l'autorizzazione
ACCESS_FINE_LOCATION
.
L'autorizzazione fa parte del gruppo di dispositivi nelle vicinanze
L'autorizzazione NEARBY_WIFI_DEVICES
fa parte del gruppo di autorizzazioni Dispositivi nelle vicinanze. Questo gruppo, aggiunto in Android 12 (livello API 31), include anche
le autorizzazioni relative al Bluetooth e alla banda ultralarga. Quando richiedi una combinazione di autorizzazioni da questo gruppo di autorizzazioni, il sistema mostra una singola finestra di dialogo di runtime e chiede all'utente di approvare l'accesso dell'app ai dispositivi nelle vicinanze.
Nelle impostazioni di sistema, l'utente deve attivare e disattivare come gruppo le autorizzazioni Dispositivi nelle vicinanze. Ad esempio, gli utenti non possono disattivare l'accesso Wi-Fi, ma mantenere attivo l'accesso al Bluetooth 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
ritiene mai informazioni sulla posizione da API Wi-Fi; in caso contrario, dovresti specificarlo
in modo forzato. Per creare questa asserzione, imposta l'attributo usesPermissionFlags
su neverForLocation
nel file manifest dell'app, come mostrato nel seguente snippet di codice. Questa procedura è simile a quella che segui se dichiari 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 se
la tua app ha come target Android 13 o versioni successive. Ecco alcuni esempi:
dalla classe WifiManager
:
Inoltre, poiché l'autorizzazione NEARBY_WIFI_DEVICES
è disponibile solo su
Android 13 e versioni successive, devi conservare eventuali dichiarazioni per
ACCESS_FINE_LOCATION
per garantire la compatibilità con le versioni precedenti della tua app. Tuttavia, se la tua app
non si basa su
informazioni sulla posizione esatta, puoi
impostare la versione massima dell'SDK di questa autorizzazione su 32
, come mostrato nel
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 l'autorizzazione NEARBY_WIFI_DEVICES
per chiamare una delle seguenti API Wi-Fi:
WifiManager
WifiAwareManager
WifiAwareSession
WifiP2pManager
WifiRttManager
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 con Android 13 o versioni successive, per le app destinate ad Android 13 o versioni successive. Tieni presente che, se affermi che la tua app non ricava la posizione fisica dalle informazioni del dispositivo Wi-Fi, non devi più dichiarare l'autorizzazione ACCESS_FINE_LOCATION
:
La Figura 2 mostra il flusso di lavoro per l'accesso al Wi-Fi sui dispositivi con 12L o meno. Tieni presente il ricorso all'autorizzazione
ACCESS_FINE_LOCATION
.