Richiedere l'autorizzazione ad accedere ai dispositivi Wi-Fi nelle vicinanze
Mantieni tutto organizzato con le raccolte
Salva e classifica i contenuti in base alle tue preferenze.
Le app che hanno come target Android 13 (livello API 33) o versioni successive e gestiscono le connessioni Wi-Fi
devono richiedere
l'NEARBY_WIFI_DEVICESautorizzazione runtime. 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
l'autorizzazione
ACCESS_FINE_LOCATION.
L'autorizzazione fa parte del gruppo 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
autorizzazioni relative a Bluetooth e banda ultralarga. Quando richiedi una qualsiasi combinazione di autorizzazioni di questo gruppo, il sistema mostra una singola 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 le autorizzazioni Dispositivi nelle vicinanze
come gruppo. Ad esempio, gli utenti non possono disattivare l'accesso Wi-Fi, ma mantenere
l'accesso Bluetooth attivo per una determinata app.
Afferma con decisione che la tua app non ricava la posizione fisica
Quando scegli come target Android 13 o versioni successive, valuta se la tua app
deriva mai informazioni sulla posizione dalle API Wi-Fi; in caso contrario, devi
dichiararlo in modo esplicito. Per fare questa asserzione, 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 sui dispositivi Bluetooth non vengono mai utilizzate per la posizione:
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 includono i seguenti
metodi della classe WifiManager:
Inoltre, poiché l'autorizzazione NEARBY_WIFI_DEVICES è disponibile solo su
Android 13 e versioni successive, devi conservare le dichiarazioni per
ACCESS_FINE_LOCATION
per garantire la compatibilità con le versioni precedenti nella tua app. Tuttavia, se la tua app
non si basa altrimenti su
informazioni sulla posizione esatta, puoi
impostare la versione SDK massima di questa autorizzazione su 32, come mostrato nel
seguente snippet di codice:
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:
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, 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:
Figura 1. Diagramma di flusso
per determinare se un'app che ha come target Android 13 (livello API 33) o versioni successive
può accedere alle informazioni sul Wi-Fi.
La Figura 2 mostra il flusso di lavoro di accesso al Wi-Fi sui dispositivi con
12L o versioni precedenti. Tieni presente che si basa sull'autorizzazione
ACCESS_FINE_LOCATION.
Figura 2. Diagramma di flusso
per determinare se un'app che ha come target 12L (livello API 32) o versioni precedenti
può accedere alle informazioni sul Wi-Fi.
I campioni di contenuti e codice in questa pagina sono soggetti alle licenze descritte nella Licenza per i contenuti. Java e OpenJDK sono marchi o marchi registrati di Oracle e/o delle sue società consociate.
Ultimo aggiornamento 2025-08-27 UTC.
[[["Facile da capire","easyToUnderstand","thumb-up"],["Il problema è stato risolto","solvedMyProblem","thumb-up"],["Altra","otherUp","thumb-up"]],[["Mancano le informazioni di cui ho bisogno","missingTheInformationINeed","thumb-down"],["Troppo complicato/troppi passaggi","tooComplicatedTooManySteps","thumb-down"],["Obsoleti","outOfDate","thumb-down"],["Problema di traduzione","translationIssue","thumb-down"],["Problema relativo a esempi/codice","samplesCodeIssue","thumb-down"],["Altra","otherDown","thumb-down"]],["Ultimo aggiornamento 2025-08-27 UTC."],[],[],null,["Apps that target Android 13 (API level 33) or higher and manage Wi-Fi connections\nshould request the\n[`NEARBY_WIFI_DEVICES`](/reference/android/Manifest.permission#NEARBY_WIFI_DEVICES)\n[runtime permission](/guide/topics/permissions/overview#runtime). This\npermission makes it easier to justify an app's access of nearby Wi-Fi devices;\non previous versions of Android, these apps needed to declare the\n[`ACCESS_FINE_LOCATION`](/reference/android/Manifest.permission#ACCESS_FINE_LOCATION)\npermission instead.\n| **Caution:** If your app tries to call a Wi-Fi API without the proper permission, a [`SecurityException`](/reference/java/lang/SecurityException) occurs.\n\nPermission is part of the nearby devices group\n\nThe `NEARBY_WIFI_DEVICES` permission is part of the **Nearby devices**\npermission group. This group, added in Android 12 (API level 31), also includes\npermissions related to Bluetooth and Ultra-wideband. When you request any\ncombination of permissions from this permission group, the system shows a single\nruntime dialog and asks the user to approve your app's access to nearby devices.\nIn system settings, the user must enable and disable the **Nearby devices**\npermissions as a group; for example, users can't disable Wi-Fi access but keep\nBluetooth access enabled for a given app.\n\nStrongly assert that your app doesn't derive physical location\n\nWhen you target Android 13 or higher, consider whether your app\never derives location information from Wi-Fi APIs; if not, you should strongly\nassert that. To make this assertion, set the `usesPermissionFlags` attribute to\n`neverForLocation` in your app's manifest file, as shown in the following code\nsnippet. This process is similar to the one you do when you\n[assert that Bluetooth device information is never used for location](/guide/topics/connectivity/bluetooth/permissions#assert-never-for-location): \n\n```xml\n\u003cmanifest ...\u003e\n \u003cuses-permission android:name=\"android.permission.NEARBY_WIFI_DEVICES\"\n android:usesPermissionFlags=\"neverForLocation\" /\u003e\n \u003capplication ...\u003e\n ...\n \u003c/application\u003e\n\u003c/manifest\u003e\n```\n\nPrevious versions and some APIs require location permission\n\nSeveral Wi-Fi APIs require the `ACCESS_FINE_LOCATION` permission, even when your\napp targets Android 13 or higher. Examples include the following\nmethods from the `WifiManager` class:\n\n- [`getScanResults()`](/reference/android/net/wifi/WifiManager#getScanResults())\n- [`startScan()`](/reference/android/net/wifi/WifiManager#startScan())\n\nAlso, because the `NEARBY_WIFI_DEVICES` permission is available only on\nAndroid 13 and higher, you should keep any declarations for\n[`ACCESS_FINE_LOCATION`](/reference/android/Manifest.permission#ACCESS_FINE_LOCATION)\nto provide backward compatibility in your app. However, as long as your app\ndoesn't otherwise rely on\n[precise location information](/training/location/permissions#accuracy), you can\nset the maximum SDK version of this permission to `32`, as shown in the\nfollowing code snippet: \n\n```xml\n\u003cmanifest ...\u003e\n \u003cuses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"\n android:maxSdkVersion=\"32\" /\u003e\n \u003capplication ...\u003e\n ...\n \u003c/application\u003e\n\u003c/manifest\u003e\n```\n\nCheck for APIs that require the permission\n\nIf your app targets Android 13 or higher, you must declare the\n`NEARBY_WIFI_DEVICES` permission to call any of the following Wi-Fi APIs:\n\n- `WifiManager`\n - [`startLocalOnlyHotspot()`](/reference/android/net/wifi/WifiManager#startLocalOnlyHotspot(android.net.wifi.WifiManager.LocalOnlyHotspotCallback,%20android.os.Handler))\n- `WifiAwareManager`\n - [`attach(AttachCallback attachCallback,\n IdentityChangedListener identityChangedListener,\n Handler handler)`](/reference/android/net/wifi/aware/WifiAwareManager#attach(android.net.wifi.aware.AttachCallback,%20android.net.wifi.aware.IdentityChangedListener,%20android.os.Handler))\n- `WifiAwareSession`\n - [`publish()`](/reference/android/net/wifi/aware/WifiAwareSession#publish(android.net.wifi.aware.PublishConfig,%20android.net.wifi.aware.DiscoverySessionCallback,%20android.os.Handler))\n - [`subscribe()`](/reference/android/net/wifi/aware/WifiAwareSession#subscribe(android.net.wifi.aware.SubscribeConfig,%20android.net.wifi.aware.DiscoverySessionCallback,%20android.os.Handler))\n- `WifiP2pManager`\n - [`addLocalService()`](/reference/android/net/wifi/p2p/WifiP2pManager#addLocalService(android.net.wifi.p2p.WifiP2pManager.Channel,%20android.net.wifi.p2p.nsd.WifiP2pServiceInfo,%20android.net.wifi.p2p.WifiP2pManager.ActionListener))\n - [`connect()`](/reference/android/net/wifi/p2p/WifiP2pManager#connect(android.net.wifi.p2p.WifiP2pManager.Channel,%20android.net.wifi.p2p.WifiP2pConfig,%20android.net.wifi.p2p.WifiP2pManager.ActionListener))\n - [`createGroup()`](/reference/android/net/wifi/p2p/WifiP2pManager#createGroup(android.net.wifi.p2p.WifiP2pManager.Channel,%20android.net.wifi.p2p.WifiP2pConfig,%20android.net.wifi.p2p.WifiP2pManager.ActionListener))\n - [`discoverPeers()`](/reference/android/net/wifi/p2p/WifiP2pManager#discoverPeers(android.net.wifi.p2p.WifiP2pManager.Channel,%20android.net.wifi.p2p.WifiP2pManager.ActionListener))\n - [`discoverServices()`](/reference/android/net/wifi/p2p/WifiP2pManager#discoverServices(android.net.wifi.p2p.WifiP2pManager.Channel,%20android.net.wifi.p2p.WifiP2pManager.ActionListener))\n - [`requestDeviceInfo()`](/reference/android/net/wifi/p2p/WifiP2pManager#requestDeviceInfo(android.net.wifi.p2p.WifiP2pManager.Channel,%20android.net.wifi.p2p.WifiP2pManager.DeviceInfoListener))\n - [`requestGroupInfo()`](/reference/android/net/wifi/p2p/WifiP2pManager#requestGroupInfo(android.net.wifi.p2p.WifiP2pManager.Channel,%20android.net.wifi.p2p.WifiP2pManager.GroupInfoListener))\n - [`requestPeers()`](/reference/android/net/wifi/p2p/WifiP2pManager#requestPeers(android.net.wifi.p2p.WifiP2pManager.Channel,%20android.net.wifi.p2p.WifiP2pManager.PeerListListener))\n- `WifiRttManager`\n - [`startRanging()`](/reference/android/net/wifi/rtt/WifiRttManager#startRanging(android.net.wifi.rtt.RangingRequest,%20java.util.concurrent.Executor,%20android.net.wifi.rtt.RangingResultCallback))\n\nWi-Fi access workflows\n\nFigure 1 shows the Wi-Fi access workflow on devices that run\nAndroid 13 or higher, for apps that target\nAndroid 13 or higher. Note that, as long as you assert that your\napp doesn't derive physical location from Wi-Fi device information, you don't\nneed to declare the `ACCESS_FINE_LOCATION` permission anymore:\n**Figure 1.** Flow chart to determine whether an app that targets Android 13 (API level 33) or higher can access Wi-Fi information.\n\nFigure 2 shows the Wi-Fi access workflow on devices that run\n12L or lower. Note the reliance on the\n`ACCESS_FINE_LOCATION` permission.\n**Figure 2.** Flow chart to determine whether an app that targets 12L (API level 32) or lower can access Wi-Fi information."]]