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