Sistemi Mobili e Wireless Android Localizzazione utente Stefano Burigat Dipartimento di Matematica e Informatica Università di Udine www.dimi.uniud.it/burigat stefano.burigat@uniud.it
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 virgola seguito dal nome del package dell'applicazione 12
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