Limiti di accesso alla posizione in background
Mantieni tutto organizzato con le raccolte
Salva e classifica i contenuti in base alle tue preferenze.
Nel tentativo di ridurre il consumo energetico, Android 8.0 (livello API 26) limita la frequenza con cui un'app può recuperare la posizione attuale dell'utente mentre è in esecuzione in background. In queste condizioni, le app possono ricevere aggiornamenti sulla posizione solo alcune volte ogni ora.
Nota: queste limitazioni si applicano a tutte le app utilizzate sui dispositivi con Android 8.0 (livello API 26) o versioni successive, indipendentemente dalla versione dell'SDK target di un'app.
Questo comportamento di recupero della posizione è particolarmente importante da tenere presente se la tua app si basa su avvisi in tempo reale o sul rilevamento dei movimenti durante l'esecuzione in background.
Il comportamento delle app in primo piano viene mantenuto
Se un'app è in primo piano su un dispositivo con Android 8.0 (livello API 26),
il comportamento di aggiornamento della posizione è lo stesso di Android 7.1.1 (livello API
25) e versioni precedenti.
Avviso: se la tua app recupera aggiornamenti della posizione quasi in tempo reale su un lungo periodo di tempo, la durata della batteria del dispositivo si riduce notevolmente.
Ottimizzare il comportamento della posizione dell'app
Valuta se i casi d'uso della tua app per l'esecuzione in background non possono essere completati se l'app riceve aggiornamenti della posizione in modo infrequente. In questo caso, puoi recuperare gli aggiornamenti della posizione più di frequente eseguendo una delle seguenti azioni:
- Porta l'app in primo piano.
-
Avvia un servizio in primo piano nella tua app chiamando
startForegroundService()
. Quando un servizio in primo piano è attivo, viene visualizzato come notifica in corso nell'area delle notifiche.
Attenzione: se la tua app avvia un servizio in primo piano mentre è in esecuzione in background su un dispositivo con Android 11 (livello API 30) o versioni successive, non può accedere alle informazioni sulla posizione, a meno che l'utente non abbia concesso l'autorizzazione ACCESS_BACKGROUND_LOCATION
alla tua app. Per saperne di più, consulta le indicazioni sulle limitazioni durante l'uso associate ai servizi in primo piano.
-
Utilizza elementi dell'API Geofencing, come
GeofencingClient
, ottimizzati per ridurre al minimo il consumo di energia.
-
Utilizza un ascoltatore di posizione passivo, che potrebbe ricevere aggiornamenti sulla posizione più rapidi se ci sono app in primo piano che richiedono aggiornamenti sulla posizione a una frequenza maggiore.
Nota: se la tua app ha bisogno di accedere alla cronologia delle posizioni che contiene aggiornamenti frequenti, utilizza la versione raggruppata degli elementi dell'API Fused Location Provider, ad esempio l'interfaccia FusedLocationProviderApi
. Quando l'app è in esecuzione in background, questa API riceve la posizione dell'utente più di frequente rispetto all'API non in batch. Tieni presente, tuttavia, che la tua app riceve comunque aggiornamenti in batch solo alcune volte ogni ora.
API interessate
Le modifiche al comportamento di recupero della posizione nelle app in background interessano le seguenti API:
- Fused
Location Provider (FLP)
-
-
Se l'app è in esecuzione in background, il servizio di sistema di geolocalizzazione calcola una nuova posizione per l'app solo alcune volte ogni ora.
Ciò accade anche quando la tua app richiede aggiornamenti della posizione più frequenti.
Tuttavia, se utilizzi la
versione batch di FLP, hai accesso a una cronologia della posizione più frequente nel tempo dopo che la tua app riceve un aggiornamento batch,
che si verifica anche solo alcune volte ogni ora.
- Se la tua app è in esecuzione in primo piano, le frequenze di campionamento della posizione rimangono invariate rispetto ad Android 7.1.1 (livello API 25).
- Geofencing
-
- Le app in background possono ricevere eventi di transizione di geolocalizzazione più frequentemente rispetto agli aggiornamenti del fornitore di posizione combinato.
- La reattività media per un evento di geolocalizzazione è di circa ogni due minuti.
- Misurazioni GNSS e messaggi di navigazione GNSS
-
- Gestore della posizione
-
-
Gli aggiornamenti della posizione vengono forniti alle app in background solo alcune volte
ogni ora.
Nota: se la tua app è in esecuzione su un dispositivo su cui è installato Google Play Services, ti consigliamo vivamente di utilizzare il Fornitore di posizione combinato (FLP).
- Gestore Wi-Fi
-
Il metodo
startScan()
esegue una ricerca completa delle app in background solo alcune volte ogni ora. Se un'app in background richiama di nuovo il metodo poco dopo, la classe WifiManager
fornisce i risultati memorizzati nella cache della scansione precedente.
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-07-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-07-27 UTC."],[],[],null,["# Background Location Limits\n\nIn an effort to reduce power consumption, Android 8.0 (API level 26) limits\nhow frequently an app can retrieve the user's current location while the app is\n[running in the background](/guide/background). Under these\nconditions, apps can receive location updates only a few times each hour.\n\n**Note:** These limitations apply to all apps used on devices\nrunning Android 8.0 (API level 26) or higher, **regardless of an app's\ntarget SDK version**.\n\nThis location retrieval behavior is particularly\nimportant to keep in mind if your app relies on real-time alerts or motion\ndetection while running in the background.\n\nForeground app behavior is preserved\n------------------------------------\n\n\nIf an app is in the foreground on a device running Android 8.0 (API level 26),\nthe location update behavior is the same as on Android 7.1.1 (API level\n25) and lower.\n\n**Warning:** If your app retrieves near real-time location\nupdates over a long period of time, the device's battery life becomes\nsignificantly shorter.\n\nTuning your app's location behavior\n-----------------------------------\n\nConsider whether your app's use cases for running in the background cannot\nsucceed at all if your app receives infrequent location updates. If this is the\ncase, you can retrieve location updates more frequently by performing one of the\nfollowing actions:\n\n- Bring your app to the foreground.\n- Start a [foreground\n service](/guide/components/foreground-services) in your app by calling\n [startForegroundService()](/reference/android/content/Context#startForegroundService(android.content.Intent)). When such a foreground service is active, it\n appears as an ongoing notification in the\n [notification\n area](/guide/topics/ui/notifiers/notifications).\n\n **Caution:** If your app starts a foreground service\n while running in the background on a device that runs Android 11 (API\n level 30) or higher, your app cannot access location information unless the\n user has granted the\n [`ACCESS_BACKGROUND_LOCATION`](/reference/android/Manifest.permission#ACCESS_BACKGROUND_LOCATION)\n permission to your app. For more information, view the guidance about the\n [while-in-use\n restrictions](/guide/components/foreground-services#while-in-use-restrictions) that are associated with foreground services.\n- Use elements of the Geofencing API, such as the [`GeofencingClient`](https://developers.google.com/android/reference/com/google/android/gms/location/GeofencingClient), which are optimized for minimizing power use.\n- Use a passive location listener, which may receive faster location updates if there are foreground apps requesting location updates at a faster rate.\n\n**Note:** If your app needs access to location history that\ncontains time-frequent updates, use the batched version of the Fused Location\nProvider API elements, such as the\n[`FusedLocationProviderApi`](https://developers.google.com/android/reference/com/google/android/gms/location/FusedLocationProviderApi)\ninterface. When your app is running in the background, this API receives the\nuser's location more frequently than the non-batched API. Keep in mind, however,\nthat your app still receives updates in batches only a few times each hour.\n\nAffected APIs\n-------------\n\n\nThe changes to location retrieval behavior in background apps affect the\nfollowing APIs:\n\n[Fused\nLocation Provider (FLP)](https://developers.google.com/android/reference/com/google/android/gms/location/FusedLocationProviderApi)\n:\n - If your app is running in the background, the location system service\n computes a new location for your app only a few times each hour. This\n is the case even when your app is requesting more frequent location\n updates.\n\n By using the\n [batched version](https://developers.google.com/android/reference/com/google/android/gms/location/LocationRequest#setMaxWaitTime(long)) of FLP, however, you have access to more\n time-frequent location history after your app receives a batch update,\n which also occurs only a few times each hour.\n - If your app is running in the foreground, there is no change in location sampling rates compared to Android 7.1.1 (API level 25).\n\nGeofencing\n:\n - Background apps can receive geofencing transition events more frequently than updates from the Fused Location Provider.\n - The average responsiveness for a geofencing event is every couple of minutes or so.\n\nGNSS Measurements and GNSS Navigation Messages\n:\n - When your app is in the background, callbacks that are registered to receive outputs from [GnssMeasurement](/reference/android/location/GnssMeasurement) and [GnssNavigationMessage](/reference/android/location/GnssNavigationMessage) stop executing.\n\nLocation Manager\n:\n - Location updates are provided to background apps only a few times\n each hour.\n\n\n **Note:** If your app is running on a device with\n Google Play services installed, it is highly recommended that you use\n the [Fused\n Location Provider (FLP)](https://developers.google.com/android/reference/com/google/android/gms/location/FusedLocationProviderApi) instead.\n\nWi-Fi Manager\n:\n The [startScan()](/reference/android/net/wifi/WifiManager#startScan()) method\n performs a full scan for background apps only a few times each hour. If a\n background app calls the method again soon afterward, the\n [WifiManager](/reference/android/net/wifi/WifiManager) class provides cached results from the\n previous scan."]]