La geolocalizzazione



Documenti analoghi
Android world. Sviluppare app per Android. Un insieme di software per dispositivi mobili (smartphone, tablet, portatili...)

Sistemi Mobili e Wireless Android Localizzazione utente

Programmazione Android. Luca Morettoni

Lezione 15 Location e mappe

Lezione 3 Le attività

Lezione 3 Le attività

[AD.AGIO] ANDROID SDK

Sistemi Mobili e Wireless Android Primi passi

Android. Android03: Ciclo di vita di una Activity.

Lezione 13 Content Provider

L ambiente di sviluppo Android Studio

Luca Mari, Sistemi informativi applicati (reti di calcolatori) appunti delle lezioni. Architetture client/server: applicazioni server

Utilizzo della APP IrriframeVoice. Versione 1.0 maggio 2015

ISTRUZIONI OPERATIVE AGGIORNAMENTO DEL 18/04/2013

Ricerca posizione Nokia N76-1

ALTRO. v (Maggio 2015)

Android. Anatomia di una applicazione

SmartGPS Satellite Information System Guida all utilizzo del programma Sviluppato da Fabio e Marco Adriani Versione 1.0.0

Cliens Redigo Versione Aggiornamento al manuale.

7.4 Estrazione di materiale dal web

Corso sul linguaggio Java

Esercizi sulla definizione di classi (Fondamenti di Informatica 1 Walter Didimo) Soluzioni

Corso di programmazione di sistemi mobile 1. Android. Google Cloud Messaging

GESCO MOBILE per ANDROID

CORSO ACCESS PARTE II. Esistono diversi tipi di aiuto forniti con Access, generalmente accessibili tramite la barra dei menu (?)

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

Android. Intent e intent-filter. diegozabot@yahoo.it

MOBILE WEB DESIGN TUTORIAL ANDROID METAIO AUGMENTED REALITY

Grafico della parabola

TITOLO ESPERIENZA: Progetto Arduino GPS OBIETTIVO: Realizzare tramite Arduino un sistema di localizzazione GPS

13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti

Algoritmi di Ricerca. Esempi di programmi Java

Guida introduttiva. Aprire una finestra di dialogo Facendo clic sull'icona di avvio vengono visualizzate ulteriori opzioni per un gruppo.

La struttura dati ad albero binario

Programmazione Android A cura di Carlo Pelliccia. Lezione 7 Menù

Tricks & Tips. [Access] Tutorial - ActiveX - Controllo Tree View. - Michele de Nittis - Versione: 1 Data Versione: venerdì 30 agosto 2002

Programma Gestione Presenze Manuale autorizzatore. Versione /08/2010. Area Sistemi Informatici - Università di Pisa

Programmazione ad Oggetti: JAVA. Esercitazione

SISTEMA DI TELECONTROLLO PER LA GESTIONE DELLA FLOTTA

Lezione 11 Accesso al file system

Esercitazione n 4. Obiettivi

FIRESHOP.NET. Gestione del taglia e colore.

Esercitazioni di Progettazione del Software. Esercitazione (Prova al calcolatore del 17 settembre 2010)

Configurazione di Outlook Express

Come utilizzare il sito Verdeazzurroligure

Realizzazione di una classe con un associazione

Realizzazione di una semplice applicazione HelloWorld con una introduzione delle API di base del SDK Android.

Istruzioni operative (v. 1.01) Servizio MB - Mobile Banking Banca Passadore

Modellazione avanzata dei fogli di lavoro Le Tabelle PIVOT

appunti delle lezioni Architetture client/server: applicazioni server

iphone App. Istruzioni per l'uso dell'applicazione dell'iphone Nota importante:

MANUALE PARCELLA FACILE PLUS INDICE

Modulo 3 - Elaborazione Testi 3.5 Stampa unione

Prova di Laboratorio di Programmazione

Manuale NetSupport v Liceo G. Cotta Marco Bolzon

Esercizio data base "Biblioteca"

Your Detecting Connection. Manuale utente.

Il sofware è inoltre completato da una funzione di calendario che consente di impostare in modo semplice ed intuitivo i vari appuntamenti.

13. Chain of Responsibility

MANUALE UTENTE VERSIONE A.1.1

FATTURAZIONE ELETTRONICA PA

Manuale di configurazione di Notebook, Netbook e altri dispositivi personali che accedono all Hot e di programmi per la comunicazione

DENUNCE EDILCONNECT GUIDA COMPILAZIONE

Breed Novità della release. Sommario

Vittorio Veneto,

BDCC : Guida rapida all utilizzo

Guida I-Help App. Android

ALTRO. v (Aprile 2015)

Guida per la creazione e la gestione di un profilo Google Scholar Citations

Metti il GPS sul cellulare Nokia

DESKTOP. Uso del sistema operativo Windows XP e gestione dei file. Vediamo in dettaglio queste parti.

Registratori di Cassa

Software Servizi Web UOGA

Cosa è un foglio elettronico

14/10/2015 ALESSANDRAZULLO SVILUPPO DI APPLICAZIONI ANDROID- VERSIONE 1. Alessandra Zullo

Monitor Orientamento. Manuale Utente

Scuola Digitale. Manuale utente. Copyright 2014, Axios Italia

Sviluppo Applicativi personalizzati per automatizzare le Analisi SPC

WG-TRANSLATE Manuale Utente WG TRANSLATE. Pagina 1 di 15

Il calendario di Windows Vista

10 - Programmare con gli Array

PowerDIP Software gestione presenze del personale aziendale. - Guida rapida all inserimento dei nominativi e delle timbrature -

MAGAZZINO FISCALE (agg. alla rel )

. A primi passi con microsoft a.ccepss SommarIo: i S 1. aprire e chiudere microsoft access Start (o avvio) l i b tutti i pro- grammi

Le APP(licazioni) e le funzioni di questa lezione:

Scheda operativa Versione rif c00. Libro Inventari

Assessorato alla Sanità ARPA. Anagrafe Regionale dei Prodotti Amministrabili. Manuale Utente 1.0.0

Uno dei pregi di Java è quello di integrare la documentazione con il codice stesso Formato dei commenti:

Ciclo di vita delle aevità Android Mobile Programming Prof. R. De Prisco

Guida Rapida di Syncronize Backup

MANUALE UTENTE Fiscali Free

Transcript:

La geolocalizzazione La maggior parte dei dispositivi mobili di ultima generazione è dotata di un antenna GPS che permette di conoscere, in breve tempo e con la precisione di qualche metro, la propria posizione. Il termine geolocalizzazione (in inglese geolocation) viene usato per indicare le informazioni sulla posizione geografica sul globo terrestre del dispositivo mobile. L informazione sulla geolocalizzazione permette di conoscere la posizione degli utenti dei dispositivi mobili e ha stimolato lo sviluppo di applicazioni e servizi che sfruttano tale dato. Per esempio, se l utente utilizza lo smartphone per effettuare la ricerca di un ristorante, i risultati possono essere ordinati mettendo al primo posto gli esercizi commerciali situati nelle vicinanze. I meccanismi con cui Android rileva la posizione corrente del dispositivo sono diversi: - l antenna GPS, riceve la posizione accurata dai satelliti; - la rete cellulare, riceve le informazioni sulla posizione, tramite la scheda SIM, dalle celle telefoniche; - il segnale WiFi: ricava la posizione dai segnali delle reti WiFi attive nelle vicinanze. Il primo meccanismo è il più preciso ma comporta un consumo di batteria molto superiore rispetto agli altri due sistemi, che, al contrario, restituiscono una posizione più approssimata. La scelta di quale sistema di rilevazione utilizzare nelle applicazioni è stabilita dal programmatore ed è confermata dall utente. Per accedere alle informazioni sulla posizione, le applicazioni devono richiederne il permesso, aggiungendo una delle seguenti righe al manifesto: <uses-permission android:name="android.permission.access_coarse_location" /> <uses-permission android:name="android.permission.access_fine_location" /> ACCESS_COARSE_LOCATION è il permesso per utilizzare come sistema di posizionamento la rete WiFi o la rete cellulare; è un sistema meno preciso, ma più rapido e utilizzabile anche sui dispositivi sprovvisti di antenna GPS. ACCESS_FINE_LOCATION è il permesso per utilizzare come sistema di posizionamento il GPS; è un sistema più preciso, ma più lento, non funziona all interno degli edifici e non funziona su dispositivi sprovvisti di antenna GPS. Le classi di Android che forniscono i servizi per gestire la geolocalizzazione si trovano nel package android.location. In particolare, la classe LocationManager permette di accedere alle informazioni sulla posizione corrente. Il seguente frammento di codice crea un istanza di LocationManager: String sevizio = Context.LOCATION_SERVICE; LocationManager locationmanager; locationmanager = (LocationManager) getsystemservice(servizio); Per ottenere l ultima posizione nota si utilizza il metodo getlastknownlocation indicando il sistema di posizionamento che si intende utilizzare: String sistema = LocationManager.GPS_PROVIDER; Location posizione = locationmanager.getlastknownlocation(sistema); Il sistema di posizionamento può essere scelto tra: - LocationManager.GPS_PROVIDER, per l utilizzo del GPS, - LocationManager.NETWORK_PROVIDER, per l utilizzo della rete WiFi o cellulare. 1

La posizione geografica viene memorizzata in un oggetto di classe Location che contiene le informazioni sulla latitudine e sulla longitudine, sull altitudine e sulla velocità. I metodi principali della classe Location sono indicati nella seguente tabella. Metodo getlatitude() getlongitude() getaccuracy() hasaltitude() getaltitude() Descrizione Restituisce la latitudine in gradi. Restituisce la longitudine in gradi. Restituisce una stima in metri di quanto la posizione attuale è precisa. Restituisce il valore true se è disponibile l altitudine per la posizione geografica. Restituisce l altitudine in metri sopra il livello del mare. PROGETTO Visualizzare i dati sulla posizione corrente. L applicazione è composta da un unica finestra e da una casella di testo su cui vengono riportate le informazioni relative all ultima posizione del dispositivo mobile. Nel file AndroidManifest.xml si devono richiedere i permessi per l utilizzo del GPS tramite l aggiunta del seguente tag: <uses-permission android:name="android.permission.access_fine_location" /> Il codice sorgente di tutti i file che compongono il progetto è riportato di seguito. Manifest (AndroidManifest.xml) <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="it.istitutotecnico.posizione" android:versioncode="1" android:versionname="1.0" > <uses-sdk android:minsdkversion="8" android:targetsdkversion="17" /> <uses-permission android:name="android.permission.access_fine_location" /> <application android:allowbackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/apptheme" > <activity android:name="it.istitutotecnico.posizione.mainactivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.main" /> <category android:name="android.intent.category.launcher" /> </intent-filter> </activity> </application> </manifest> 2

Layout (res/layout/activity_main.xml) <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/txtposizione" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </RelativeLayout> Activity (MainActivity.java) package it.istitutotecnico.posizione; import android.app.activity; import android.content.context; import android.location.location; import android.location.locationmanager; import android.os.bundle; import android.view.menu; import android.widget.textview; public class MainActivity extends Activity protected void oncreate(bundle savedinstancestate) super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); LocationManager locationmanager; String servizio = Context.LOCATION_SERVICE; locationmanager = (LocationManager)getSystemService(servizio); String sistema = LocationManager.GPS_PROVIDER; Location posizione = locationmanager.getlastknownlocation(sistema); mostraposizione(posizione); public void mostraposizione(location pos) TextView txtposizione; txtposizione = (TextView) findviewbyid(r.id.txtposizione); String msg = "Posizione non trovata."; 3

if (pos!= null) double lat = pos.getlatitude(); double lon = pos.getlongitude(); double acc = pos.getaccuracy(); double alt = 0; if (pos.hasaltitude()) alt = pos.getaltitude(); msg = "Latitudine = " + lat + "\n"; msg += "Longitudine = " + lon + "\n"; msg += "Precisione = " + acc + "\n"; msg += "Altitudine = " + alt + "\n"; txtposizione.settext(msg); public boolean oncreateoptionsmenu(menu menu) getmenuinflater().inflate(r.menu.activity_main, menu); return true; 4

Il progetto precedente verifica la posizione nel momento in cui l app viene eseguita. Per poter monitorare le variazioni nella posizione del dispositivo mobile si deve registrare un ascoltatore che viene richiamato ad intervalli regolari. Le variazioni di posizione vengono segnalate solo se sono maggiori di una distanza minima impostata. Per esempio, per richiedere gli aggiornamenti della posizione ogni 3 secondi, equivalenti a 3000 millisecondi, e per una distanza minima di 10 metri si deve usare il seguente comando: locationmanager.requestlocationupdates(sistema, 3000, 10, gestoreposizione); L ultimo parametro è un oggetto di classe LocationListener, che contiene le istruzioni per gestire le variazioni nella posizione e nello stato del sistema di posizionamento. La sua struttura generica è mostrata nel seguente frammento di codice: LocationListener gestoreposizione = new LocationListener() public void onlocationchanged(location posizione) public void onproviderdisabled(string sistema) public void onproviderenabled(string sistema) public void onstatuschanged(string sistema, int stato, Bundle b) ; Il metodo onlocationchanged viene eseguito con la frequenza impostata nel metodo requestlocationupdates se la distanza è variata più del valore minimo indicato. Le istruzioni che si vogliono eseguire, a seguito di una modifica nella posizione, devono essere inserite in questo metodo. Per interrompere l aggiornamento della posizione si deve eseguire il metodo: locationmanager.removeupdates(gestoreposizione); Il controllo delle variazioni nella posizione può essere inserito nel progetto precedente modificando il file MainActivity.java nel seguente modo: package it.istitutotecnico.posizione; import android.app.activity; import android.content.context; import android.location.location; import android.location.locationlistener; import android.location.locationmanager; import android.os.bundle; import android.view.menu; import android.widget.textview; public class MainActivity extends Activity LocationManager locationmanager; LocationListener gestoreposizione = new LocationListener() public void onlocationchanged(location posizione) mostraposizione(posizione); public void onproviderdisabled(string sistema) public void onproviderenabled(string sistema) public void onstatuschanged(string sistema, int stato, Bundle b) ; 5

protected void oncreate(bundle savedinstancestate) super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); String servizio = Context.LOCATION_SERVICE; locationmanager = (LocationManager)getSystemService(servizio); String sistema = LocationManager.GPS_PROVIDER; Location posizione = locationmanager.getlastknownlocation(sistema); mostraposizione(posizione); protected void ondestroy() super.ondestroy(); locationmanager.removeupdates(gestoreposizione); public void mostraposizione(location pos) TextView txtposizione; txtposizione = (TextView) findviewbyid(r.id.txtposizione); String msg = "Posizione non trovata."; if (pos!= null) double lat = pos.getlatitude(); double lon = pos.getlongitude(); double acc = pos.getaccuracy(); double alt = 0; if (pos.hasaltitude()) alt = pos.getaltitude(); msg = "Latitudine = " + lat + "\n"; msg += "Longitudine = " + lon + "\n"; msg += "Precisione = " + acc + "\n"; msg += "Altitudine = " + alt + "\n"; txtposizione.settext(msg); public boolean oncreateoptionsmenu(menu menu) // Inflate the menu; this adds items to the action bar if it is present. getmenuinflater().inflate(r.menu.activity_main, menu); return true; Si noti che il metodo removeupdates è stato inserito nel metodo ondestroy, richiamato automaticamente da Android quando l applicazione viene chiusa. Si noti inoltre che, rispetto al progetto precedente, l oggetto locationmanager è stato trasformato da variabile, locale al metodo, ad attributo della classe, in modo da poter essere utilizzato in tutti i metodi. 6