Chapter - Server users.dimi.uniud.it

Transcript

Chapter - Server users.dimi.uniud.it
Sistemi Mobili e Wireless
Android – Localizzazione utente
Stefano Burigat
Dipartimento di Matematica e Informatica
Università di Udine
www.dimi.uniud.it/burigat
[email protected]
Localizzazione utente
• Le funzionalità che permettono la localizzazione utente in
Android sono contenute nel package android.location
• Il componente centrale del framework di localizzazione è il
LocationManager
• Una volta ottenuta un'istanza del LocationManager
attraverso il metodo getSystemService(), è possibile:
– ottenere la lista di tutti i LocationProvider, entità responsabili
della fornitura delle informazioni di localizzazione
– registrarsi/deregistrarsi con un LocationProvider per ottenere la
posizione corrente aggiornata nel tempo
– registrarsi/deregistrarsi per lanciare un certo Intent nel
momento in cui l'utente si trova in una certa posizione
2
Localizzazione utente
• I due LocationProvider standard in Android sono il GPS e
l'Android Network Location Provider
– il primo sfrutta il sistema satellitare per ottenere una
localizzazione precisa ma funziona solo outdoor, consuma
batteria ed è lento nel ritornare una posizione
– il secondo sfrutta i segnali della rete cellulare o della rete WiFi,
funziona sia indoor che outdoor, è veloce e consuma meno
batteria
• E' anche possibile sfruttare entrambi i provider allo stesso
tempo
3
Localizzazione utente
4
Localizzazione utente
• Per sfruttare l'Android Network Location Provider al posto del GPS
è necessario passare LocationManager.NETWORK_PROVIDER
come primo parametro al metodo requestLocationUpdates()
• Per richiedere aggiornamenti ad entrambi i provider, basta
chiamare due volte requestLocationUpdates(), modificando il
primo parametro a seconda del provider
• Il secondo e terzo parametro di requestLocationUpdates()
specificano ogni quanto richiedere aggiornamenti (rispettivamente
ogni quanti secondi e ogni quanti metri)
– se impostati a zero, la frequenza di aggiornamento è la più alta
possibile
• Passando l'istanza del locationListener al metodo
locationManager.removeUpdates() è possibile fermare la richiesta
di aggiornamenti, risparmiando batteria
5
Localizzazione utente
• Per poter sfruttare i LocationProvider standard è necessario
impostare i relativi permessi nel file manifest
– android.permission.ACCESS_FINE_LOCATION per il GPS (basta
questo se servono entrambi i provider)
– android.permission.ACCESS_COARSE_LOCATION per il Network
Provider
• La classe Location consente di accedere anche ad altri dati come
altitudine, velocità, accuratezza, etc.
• Per simulare il GPS, si può usare
il DDMS all'interno di Eclipse
6
Geocoding
• Il geocoding consente di passare da coordinate lat/long ad
indirizzi e viceversa
• Per poter effettuare operazioni di geocoding si utilizza la
classe Geocoder che fa parte della libreria Google Maps
• E' quindi necessario impostare un nodo uses-library
all'interno del nodo application del manifest
• E' inoltre necessario il permesso Internet poichè il geocoding
si appoggia sui server di Google
7
Geocoding
• Il pezzo di codice seguente ottiene un indirizzo a partire da
coordinate lat/long
il metodo getFromLocation ritorna
una lista di indirizzi (oggetti di tipo
Address) associabili alle coordinate
specificate (in questo esempio
chiediamo max 3 indirizzi)
oggetti di tipo address mettono
a disposizione diversi metodi
per estrarre le informazioni che
servono (in questo caso la via)
8
Geocoding
• Il pezzo di codice seguente ottiene coordinate lat/long a
partire da un indirizzo
il metodo getFromLocationName
ritorna una lista di oggetti di tipo
Address associati all'indirizzo
specificato (in questo esempio
chiediamo max 3 indirizzi)
9
Mappe
• Lo sviluppo di applicazioni basate su mappe Google Maps
implica l'utilizzo di Google Maps Android API v2 (la v1 è stata
deprecata)
• Per poter utilizzare Google Maps Android API v2 è
necessario svolgere un certo numero di passi:
– Installare e configurare Google Play Services
– Ottenere una Google Maps API key attraverso la Google APIs
Console
– Modificare il manifest del progetto inserendo alcuni permessi e
la chiave ottenuta al passo precedente
– Modificare il file di layout dell'activity in cui far comparire la
mappa inserendo un MapFragment
– Utilizzare le classi ed i metodi del package
com.google.android.gms.maps
10
Mappe
• L'installazione di Google Play Services richiede i seguenti
passi:
Aprire l'Android SDK Manager
Aprire la cartella extras all'interno del Manager
Spuntare la casella Google Play Services
Importare la libreria scaricata utilizzando la funzione File →
Import → Android → Existing Android Code into Workspace
– Modificare le proprietà del progetto, definendo una dipendenza
dalla libreria importata
– Modificare il manifest dell'applicazione aggiungendo
–
–
–
–
11
Mappe
• Ottenere una Google Maps key richiede i seguenti passi:
– Ottenere l'SHA-1 della chiave utilizzata per firmare le proprie
applicazioni (durante lo sviluppo, tipicamente Eclipse utilizza
una chiave di debug generata automaticamente; l'SHA-1 di tale
chiave si può ottenere attraverso Window → Preferences →
Android → Build)
– Accedere alla Google APIs Console
(https://code.google.com/apis/console/); è necessario avere un
account Google
•
•
•
•
•
Selezionare la voce Services
Attivare l'opzione Google Maps Android API v2
Selezionare la voce API Access
Selezionare l'opzione Create new Android key...
Inserire nella finestra che compare l'SHA-1 seguito da un punto e
12
virgola seguito dal nome del package dell'applicazione
Mappe
• Modificare il manifest dell'applicazione aggiungendo i
seguenti permessi:
• Aggiungere la Google Maps API ottenuta in precedenza
all'interno del tag application (subito prima del tag di
chiusura)
13
Mappe
• Modificare il manifest dell'applicazione aggiungendo il
seguente elemento (consigliato) come figlio dell'elemento
<manifest>
14
Mappe
• Aggiungere un MapFragment al file di layout dell'activity in
cui inserire la mappa:
15
Mappe
• Utilizzare metodi e classi della Map API all'interno del codice:
16