AndroidPosizione


introduzione

Le API di Android Location sono utilizzate in un'ampia varietà di app per scopi diversi, come trovare la posizione dell'utente, notificare quando un utente ha lasciato un'area generale (Geofencing) e aiutare a interpretare l'attività dell'utente (camminare, correre, guidare, ecc.).

Tuttavia, le API di posizione Android non sono l'unico mezzo per acquisire la posizione dell'utente. Quanto segue fornirà esempi su come utilizzare il LocationManager di Android e altre librerie di posizioni comuni.

Osservazioni

Per creare app che supportano la localizzazione in Android, esistono due percorsi:

LocationManager

Professionisti

  • Controllo più granulare
  • Disponibile in tutti i dispositivi
  • Parte del framework Android

Contro

  • Lo scarico della batteria è un problema, se non gestito correttamente
  • Richiede la logica per cambiare provider di posizione, se il dispositivo non è in grado di trovare una posizione (ad esempio, un GPS scadente all'interno di un edificio)

Caratteristiche

  • Listener NMEA
  • Listener di stato GPS
  • Ascolta le modifiche allo stato del provider (ad esempio, il GPS è disattivato dall'utente)
  • Elenco dei fornitori per scegliere l'origine della posizione da

provider

GPS

  • Autorizzazioni richieste:
  • Precisione: 10m - 100m
  • Requisiti di potenza: ALTA
  • Disponibilità: in tutto il mondo (con una visione chiara del cielo)
  • NOTE :
    • Gli aggiornamenti delle posizioni di solito arrivano una volta al secondo, ma in situazioni in cui il GPS non è stato utilizzato per un po 'di tempo e l' A-GPS non è disponibile, ci vuole qualche minuto per ricevere una posizione.
    • Nei casi in cui la visione chiara del cielo è ostruita, i punti GPS non si raggruppano molto bene (i punti posizione "salta") e la precisione può essere fuorviante in certe aree a causa dell'effetto " Urban Canyon ".

Rete

  • Autorizzazioni richieste:
  • Precisione: 100m - 1000m +
  • Requisiti di alimentazione: LOW - MEDIUM
  • Disponibilità: entro il raggio della torre cellulare o del segnale wifi
  • GLI APPUNTI:
    • Gli aggiornamenti delle posizioni si verificano meno frequentemente del GPS
    • Gli aggiornamenti di posizione in genere non si raggruppano bene (i punti di localizzazione "saltano") e la precisione può variare in base al numero di fattori diversi (numero di segnali wifi, intensità del segnale, tipo di torre cellulare, ecc.)

Passivo

  • Autorizzazioni richieste:
  • Precisione: 10m - 1000m +
  • Requisiti di alimentazione: NESSUNO
  • Disponibilità: solo quando un'altra app riceve una posizione dal GPS o dalla rete
  • GLI APPUNTI:
    • Non fare affidamento su questo per darti aggiornamenti continui. Questo ascolta passivamente altre app che fanno richieste di posizione e le restituisce.
    • Non restituisce punti FusedLocationProviderApi, solo i punti di localizzazione sottostanti utilizzati per generarli.

FusedLocationProviderApi

Professionisti

  • Offre meno batteria scarica "fuori dalla scatola"
  • Gestisce male il GPS
  • Ottiene aggiornamenti più regolarmente

Contro

  • Controllo meno granulare sul GPS
  • Potrebbe non essere disponibile su tutti i dispositivi o in alcuni Paesi
  • Richiede dipendenza dalla libreria di terze parti

Caratteristiche

  • Uso ben gestito dei fornitori di localizzazione per risparmi ottimali sulle batterie
  • Generalmente genera punti più precisi di Network Location Provider
  • Aggiornamenti più frequenti della libreria, consentendo ulteriori miglioramenti
  • Non è necessario specificare il tipo di provider da utilizzare

PosizioneRichiedi livelli di priorità

PRIORITY_HIGH_ACCURACY

  • Autorizzazioni richieste:
  • Precisione: 10m - 100m
  • Requisiti di potenza: ALTA
  • Disponibilità: ovunque siano disponibili i servizi di Google Play.
  • GLI APPUNTI:
    • Se ACCESS_FINE_LOCATION non viene utilizzato, questo non utilizzerà il GPS per generare aggiornamenti di posizione, ma troverà comunque un punto abbastanza accurato nelle giuste condizioni.
    • Se si utilizza ACCESS_FINE_LOCATION , può o non può utilizzare il GPS per generare punti di posizione, a seconda di quanto accurato possa attualmente tracciare il dispositivo in base alle condizioni ambientali.
    • Sebbene questo possa riportare aggiornamenti di posizione più accurati rispetto alle altre impostazioni, è ancora soggetto all'effetto " Urban Canyon ".

PRIORITY_BALANCED_POWER_ACCURACY

  • Autorizzazioni richieste:
  • Precisione: 100m - 1000m +
  • Requisiti di alimentazione: MEDIO
  • Disponibilità: ovunque siano disponibili i servizi di Google Play.
  • GLI APPUNTI:
    • Stesse note di PRIORITY_HIGH_ACCURACY
    • Sebbene sia improbabile, questa impostazione potrebbe comunque utilizzare il GPS per generare una posizione.

PRIORITY_LOW_POWER

  • Autorizzazioni richieste:
  • Precisione: 100m - 1000m +
  • Requisiti di alimentazione: LOW
  • Disponibilità: ovunque siano disponibili i servizi di Google Play.
  • GLI APPUNTI:
    • Probabilmente non usa il GPS, ma finora non è stato testato.
    • Gli aggiornamenti in genere non sono molto accurati
    • Usato generalmente per rilevare cambiamenti significativi nella posizione

PRIORITY_NO_POWER

  • Autorizzazioni richieste:
  • Precisione: 10m - 1000m +
  • Requisiti di alimentazione: NESSUNO
  • Disponibilità: ovunque siano disponibili i servizi di Google Play.
  • GLI APPUNTI:
    • Funziona in modo quasi identico a LocationManager PASSIVE_PROVIDER
    • Riporta gli aggiornamenti dei servizi di Google Play quando ricevuti, dove PASSIVE_PROVIDER riporta gli aggiornamenti di posizione sottostanti utilizzati

Risoluzione dei problemi

OnLocationChanged () Mai chiamato

Poiché questo sembra essere un problema comune con il rilevamento di posizioni Android, inserirò una breve lista di controllo delle correzioni comuni:


  1. Controlla il tuo manifest!

    Uno dei problemi più comuni è che le autorizzazioni corrette non sono mai state fornite. Se utilizzi il GPS (con o senza rete), usa <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> , altrimenti usa <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> . FusedLocationApi di Google richiede ACCESS_FINE_LOCATION .


  1. (Per Android 6+) Verifica le autorizzazioni di runtime !

    Verifica e richiedi le autorizzazioni! Se non ti vengono mai concesse autorizzazioni, finirai con arresti anomali, o peggio (se stai riscontrando tutte le eccezioni), finirai senza alcuna indicazione di nulla! Non importa se l'utente concede il permesso all'inizio dell'app, controlla sempre se hai le autorizzazioni per tutte le chiamate. L'utente può facilmente accedere alle proprie impostazioni e revocarle.


  1. Controlla il tuo codice!

    Sei sicuro di passare nell'ascoltatore giusto? Hai aggiunto BroadcastReceiver o IntentService al manifest? Stai utilizzando PendingIntent.getService() su una classe BroadcastReceiver o su getBroadcast() su una classe IntentService ? Sei sicuro di non annullare la registrazione del listener da qualche altra parte nel tuo codice subito dopo la richiesta?


  1. Controlla le impostazioni del dispositivo!

    Ovviamente, assicurati di aver attivato i servizi di localizzazione.

    inserisci la descrizione dell'immagine qui

    Se utilizzi i servizi di rete, hai attivato "Scansione sempre disponibile"? La modalità di localizzazione è impostata su "Migliore" ("Alta precisione") o "Risparmio batteria" ("Solo rete")?

    inserisci la descrizione dell'immagine qui

    Se utilizzi il GPS, hai attivato "Migliore" ("Alta precisione") o "Solo dispositivo" in modalità Posizione?

    inserisci la descrizione dell'immagine qui


  1. Controlla il tuo codice!

    Sì, è qui due volte. Hai provato a utilizzare LocationListener invece di PendingIntent o viceversa per assicurarti di aver implementato correttamente LocationManager ? Sei sicuro che la richiesta di posizione non venga rimossa in una parte del ciclo di vita di attività o servizio che non ti aspettavi di accadere?


  1. Controlla i tuoi dintorni!

    Stai testando il GPS al primo piano di un edificio nel centro di San Francisco? Stai testando le posizioni della rete nel bel mezzo del nulla? Lavori in un bunker sotterraneo segreto privo di tutti i segnali radio, chiedendoti perché il tuo dispositivo non ha la posizione? Controlla sempre i dintorni quando cerchi di risolvere i problemi di localizzazione!


Potrebbero esserci molte altre ragioni meno ovvie per cui la posizione non funziona, ma prima di cercare quelle correzioni esoteriche, è sufficiente scorrere questa lista di controllo rapida.

Posizione Esempi correlati