Le app che hanno come target Android 13 (livello API 33) o versioni successive e gestiscono le connessioni Wi-Fi devono richiedere l'autorizzazione di runtime NEARBY_WIFI_DEVICES
. Questa
autorizzazione semplifica la giustificazione dell'accesso di un'app ai dispositivi Wi-Fi nelle vicinanze.
Nelle versioni precedenti di Android, queste app dovevano dichiarare invece 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 a Bluetooth e 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 le autorizzazioni Dispositivi nelle vicinanze come gruppo. Ad esempio, gli utenti non possono disattivare l'accesso al Wi-Fi, ma mantenere attivo l'accesso al Bluetooth per una determinata app.
Affermare con fermezza 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 fare questa affermazione, imposta l'attributo usesPermissionFlags
su
neverForLocation
nel file manifest dell'app, come mostrato nello snippet di codice
seguente. Questa procedura è simile a quella che esegui quando
affermi che le informazioni sul dispositivo Bluetooth non vengono mai utilizzate per la posizione:
<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 la tua app ha come target Android 13 o versioni successive. Alcuni esempi sono i seguenti metodi della classe WifiManager
:
Inoltre, poiché l'autorizzazione NEARBY_WIFI_DEVICES
è disponibile solo su Android 13 e versioni successive, devi mantenere le dichiarazioni per ACCESS_FINE_LOCATION
per garantire la compatibilità con le versioni precedenti nella tua app. Tuttavia, a condizione che la tua app non si basi su informazioni sulla posizione precise, puoi impostare la versione SDK massima 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
Workflow di accesso al Wi-Fi
La Figura 1 mostra il flusso di lavoro di accesso al Wi-Fi sui dispositivi con Android 13 o versioni successive, per le app che hanno come target Android 13 o versioni successive. Tieni presente che, a condizione di dichiarare che la tua app non ricava la posizione fisica dalle informazioni del dispositivo Wi-Fi, non è più necessario 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 che è necessaria l'autorizzazione ACCESS_FINE_LOCATION
.