Progettazione e implementazione di un'applicazione per la navigazione in ambito urbano per la piattaforma Android

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Progettazione e implementazione di un'applicazione per la navigazione in ambito urbano per la piattaforma Android"

Transcript

1 POLITECNICO DI MILANO Facoltà di Ingegneria Corso di laurea in Ingegneria Informatica Dipartimento di Elettronica e Informazione Anno Accademico 2007/2008 Elaborato di tesi Progettazione e implementazione di un'applicazione per la navigazione in ambito urbano per la piattaforma Android Autori: Marcello Maggioni matricola: Alberto Magni matricola: Relatore: Correlatore: prof. Antonio Capone ing. Luca Dell'Anna 1

2 Indice 1Introduzione Descrizione del problema Obiettivi prefissi Scelte Tecnologiche Soluzioni preesistenti Organizzazione del Documento...9 2Android: il sistema operativo La struttura del sistema operativo [14] Lo sviluppo di un'applicazione per Android Il plugin per Eclipse e l'emulatore Un progetto Android per Eclipse Programmare in Android [16] Altri elementi utilizzati nel progetto L'applicazione L'architettura dell'applicazione Il modello della rete dei servizi pubblici OpenStreetMap [23] Il Database La struttura del modello La comunicazione con il Database L'algoritmo di calcolo del percorso consigliato Introduzione La modellizzazione delle stazioni La scelta del mezzo e del percorso L'individuazione dei malfunzionamenti Interfaccia grafica ed Esempio di utilizzo L'inserimento dei dati La presentazione del percorso Conclusioni e possibili sviluppi Note Bibliografia

3 Indice delle Figure 1: Struttura del sistema Operativo Android : La perspective DDMS : L'emulatore del sistema operativo Android : La struttura di un progetto Android in Eclipse : Il ciclo di vita di un'activity : La struttura del Modello : La comunicazione con il DataBase : Sequence diagram della costruzione del modello : La classe Node e le sue sottoclassi : Esempio di percorso : La schermata di Input : La scelta fra diverse opzioni : L'utilizzo del dispositivo GPS : Esempio di Elenco Scambi : Partenza e Destinazione di Esempio : La mappa e le stazioni

4 1 Introduzione In questo capitolo introduttivo viene esposto l'ambito all'interno del quale il progetto si inserisce. Si descrivono quindi i problemi che il lavoro svolto intende risolvere o semplificare. Verranno discusse e motivate le scelte implementative effettuate descrivendo le possibilità tra le quali ci si è mossi. Si confronteranno quindi gli obiettivi fissati con altri progetti in sviluppo o già in circolazione mettendone in evidenza limiti e pregi 1.1 Descrizione del problema I centri ad alta densità abitativa sono particolarmente interessati da problemi legati all'elevato numero di mezzi di trasporto privati in circolazione. In alcune fasce orarie la velocità media delle automobili nel traffico cittadino è decisamente bassa. Una tale situazione comporta costi, non solo economici, e disagi molto elevati per la collettività: alti valori degli inquinanti, cattiva qualità di vita, sprechi di risorse energetiche, dispendio di tempo e denaro. I problemi esposti sono così gravi che le molte amministrazioni comunali delle città più grandi d'europa (Milano, Londra, Stoccolma) hanno deciso di introdurre una tassa per accedere al centro cittadino con i mezzi di trasporto privati. Per disincentivare l'utilizzo dell'automobile il pedaggio è stato stato fissato a valori decisamente elevati (a Londra si raggiungono 25 per singolo accesso per mezzi particolarmente inquinanti)[1]. Purtroppo soluzioni di questo tipo non sono radicali né definitive. In particolare la città di Milano non ha risolto i suoi gravi problemi di inquinamento in quanto l'area a traffico limitato ha una superficie ridotta, il che rende in pratica impossibile conseguire gli obiettivi prefissati in fase di studio. Una soluzione definitiva e duratura ai problemi del traffico può invece giungere da un utilizzo più intenso ed esteso dei mezzi pubblici, da incentivare verso tutti i possibili fruitori. Ai frequentatori saltuari di una grande città spesso risulta difficile orientarsi nella rete del trasporto urbano, e ciò è un freno a ricorrervi. Ancora più difficoltà incontra un turista che intende visitare una città del tutto ignota. Può anche presentarsi il caso di cittadini che devono recarsi in quartieri che conoscono poco. Le mappe cartacee, quando sono disponibili, non sempre sono efficaci in quanto non riportano la completa e aggiornata rappresentazione né delle linee né degli orari. Questi ultimi sono difficili da reperire se non ci si trova già alla stazione o fermata di partenza. Gravi disagi per i viaggiatori derivano dal blocco totale di una linea dei mezzi pubblici in seguito a scioperi improvvisi (particolarmente frequenti in Italia) o a malfunzionamenti dei mezzi. 4

5 Inconvenienti di questo tipo sono decisamente fastidiosi in quanto costringono il viaggiatore a riconsiderare per intero il proprio itinerario. L'obiettivo è quindi quello di rendere il ricorso ai mezzi pubblici più amichevole proponendo semplici soluzioni a problemi quali la determinazione del percorso più veloce fra località tenendo conto degli orari e degli eventuali scioperi o malfunzionamenti. 1.2 Obiettivi prefissi Lo scopo è quindi quello di realizzare un software che permetta di rendere più semplice l'utilizzo dei mezzi pubblici. Si vuole aiutare l'utente che non conosce in modo approfondito la rete delle linee urbane di una città a raggiungere una determinata destinazione. Verrà quindi elaborato un percorso da seguire tenendo conto degli orari dei mezzi che si intendono utilizzare e di eventuali problemi riguardo a guasti o a scioperi. Alla luce dei problemi descritti, per essere realmente utile e innovativa l'applicazione che si vuole realizzare deve presentare determinate caratteristiche. Deve poter essere consultabile in qualsiasi momento; in particolare quando si è in viaggio o in movimento, permettendo, in questo modo, di orientarsi in una città che non si conosce. Deve contenere informazioni riguardo la completa struttura delle linee dei diversi mezzi pubblici di cui una città è dotata. In particolare devono essere note le posizioni di tutte le fermate. Questo è un problema non semplice da risolvere in quanto spesso le linee di superficie subiscono modifiche non solo negli orari ma anche nella posizione delle fermate. L'ideale sarebbe quindi quello di possedere una fonte di informazioni sempre aggiornata. Questi dati sono di vitale importanza per realizzare sistema in grado di elaborare un percorso per raggiungere una località prestabilita. Per differenziarsi realmente da una semplice guida stradale, devono inoltre essere disponibili orari e segnalazioni di guasti o scioperi in tempo reale. É necessario anche tenere conto di quale orario consultare: festivo o feriale, estivo o invernale. L'affidabilità di questo tipo di informazioni è di fondamentale importanza in quanto su di esse si basa l'elaborazione del percorso. Ovviamente essi devono essere tenute costantemente aggiornatei in relazione a eventuali cambiamenti. La presentazione di una mappa interattiva è molto utile per poter determinare e visualizzare in modo preciso e veloce le località di partenza, arrivo e gli eventuali 5

6 scambi da effettuare tra le differenti linee. 1.3 Scelte Tecnologiche Dall'esposizione degli obiettivi che il progetto si propone di raggiungere risulta evidente che il miglior supporto per l'applicazione in sviluppo è uno smart-phone, ovvero un telefono portatile che possiede un proprio sistema operativo con funzionalità quali la navigazione in rete e la semplice gestione di file e contatti. Spesso dispositivi di questo tipo sono dotati di tastiera e di touch-screen che permettono una fruizione davvero immediata delle sue potenzialità. Grazie all'evoluzione tecnologica dell'hardware sono oggi disponibili modelli dotati di sistemi operativi con prestazioni tali da far considerare questi dispositivi assimilabili a computer invece che a semplici telefonini. L'accessibilità di questo tipo di prodotti è aumentata di molto nel corso degli anni, portando a un grande aumento delle vendite negli ultimi anni [2],[3] e permettendo una diffusione capillare del prodotto e delle loro applicazioni. Un dispositivo hardware che ha trovato grande diffusione fra gli smartphone è il rilevatore di coordinate geografiche GPS. Esso è stato introdotto per ottenere la posizione del telefono sulla superficie terreste. Questa integrazione, e la possibilità di accedere in modo veloce alla rete, ha permesso la nascita di un nuovo tipo di applicazioni software: i servizi Location-Based [4]. Essi si prefiggono l'obiettivo di fornire servizi rispondendo a tre semplici domande: Dove mi trovo?, A che cosa sono vicino? e Dove posso andare da qui?. Il mercato dei sistemi operativi per dispositivi mobili è molto variegato e scenario di grande concorrenza. a oggi 1 quelli esposti di seguito sono i software più diffusi [5]: Il sistema operativo Symbian possiede la maggioranza relativa del mercato con il 46% delle vendite. Esso è controllato per intero dalla multinazionale finlandese Nokia, la quale ha acquistato la proprietà della Symbian Ltd nel giugno del 2008 con l'obiettivo di fondare una società di software open-source [6]. Symbian è stato uno dei primi sistemi operativi per smart-phone e nel corso degli anni sono state rilasciate numerose versioni, il che ha permesso una larga diffusione su differenti modelli di dispositivi. Dato il suo grande successo e la sua diffusione Symbian è stato più volte oggetto di attacco da parte di virus informatici; questo problema può essere risolto permettendo l'installazione solo di software autenticato e protetto. Il linguaggio di 1 Ci si riferisce al terzo quadrimestre del

7 programmazione utilizzato per lo sviluppo di software in Symbian è il C++. Creare applicazioni su questo sistema operativo è però piuttosto complicato. Sono difficile realizzazione anche compiti banali. Questo è dovuto all'architettura di vecchia concezione sulla quale il software si basa. IPhone OS è il sistema rilasciato da Apple per supportare prodotti quali IPhone e Ipod Touch. Esso stato progettato in layer, come un normale sistema operativo, e con l'obiettivo di essere molto leggero; adatto a essere eseguito su un dispositivo mobile [7]. La principale limitazione del software riguarda la portabilità, esso infatti è stato studiato appositamente per l'hardware Apple. L'azienda ha rilasciato nel marzo del 2008 un tool di sviluppo per applicazioni chiamato iphone SDK 2, che permette la programmazione di software per sfruttare le potenzialità del sistema operativo. La distribuzione del prodotto sviluppato non può però avvenire in modo libero: è infatti necessario far approvare il proprio lavoro da Apple e ottenere l'autorizzazione a distribuirlo. L'azienda canadese RIM ha concentrato le proprie ricerche nello sviluppo di un sistema operativo per il dispositivo BlackBerry. Gli sforzi si sono stati diretti allo sviluppo di soluzioni wireless (per rendere semplice e funzionale il collegamento alla rete) e applicazioni per le attività di lavoro. Windows Mobile è il sistema operativo per cellulari rilasciato da Microsoft. Esso è una derivazione del sistema Windows 32 per PC. Una delle caratteristiche fondamentali del prodotto è la sua portabilità: esso infatti è disponibile per innumerevoli hardware, sia smart-phone che computer palmari. Anche Microsoft ha rilasciato un tool di sviluppo che permette la realizzazione da parte di terzi. Questo è disponibile in abbinamento all'editor di Windows Visual Studio. Di recente introduzione è il sistema operativo Android. Esso è sviluppato da una società chiamata Open Handset Alliance che è guidata dal leader dei motori di ricerca Google. La distribuzione del software sul mercato non è ancora avvenuta a livello mondiale ma da tempo è disponibile in rete un SDK (Software Development Kit) che permette lo sviluppo di applicazioni per l'architettura. Le funzionalità che vengono messe a disposizione sono davvero notevoli: possibilità di usufruire di mappe; 2 7

8 sensore GPS, fotocamera e di database integrato. Molto interessante è il fatto che il progetto ha come obiettivo rendere semplice e intuitiva la scrittura di codice. A questo si aggiunge la possibilità di accedere al codice sorgente sia del sistema operativo che di quello di ogni altra applicazione distribuita. Queste premesse fanno pensare che in futuro Android si assicurerà una fetta considerevole del mercato. Riteniamo quindi questa la soluzione migliore per lo sviluppo del software cercato. 1.4 Soluzioni preesistenti I navigatori satellitari per automobili che aiutano gli automobilisti nella guida fornendo informazioni riguardo la posizione del veicolo e il tragitto da seguire sono molto diffusi. Questo non vale per dispositivi che facilitano l'utilizzo dei mezzi pubblici indicando le linee ideali per raggiungere una località. Lo stato dell'arte in questo campo è rappresentato dal prodotto Discover Cities [8] della società statunitense NAVTEQ. Si tratta di un'applicazione software che fornisce informazioni riguardo la struttura urbanistica delle principali città americane ed europee. Essa si propone come un supporto ai programmatori che intendono sviluppare applicazioni location-based in ambito cittadino. Discover Cities permette di elaborare percorsi molto dettagliati accompagnando l'utente curva dopo curva anche sui mezzi pubblici e fornendogli orari e informazioni. A questo si aggiunge la disponibilità ottenere dati e indicazioni su come raggiungere i principali luoghi di interesse e le attrazioni di un città, funzionalità molto utile per i turisti. All'interno del progetto GoogleMap l'azienda californiana ha promosso, dal dicembre 2005, il progetto Transit [9]. Esso è un'applicazione web che permette di pianificare i propri spostamenti in ambito urbano in modo estremamente semplice. Il progetto è stato realizzato in associazione con le aziende di trasporto pubblico locale, disponendo così di informazioni dettagliate e sempre aggiornate sulle stazioni e sugli orari. Oltre che nella versione web, è disponibile anche su smart-phone e molti sono i sistemi operativi supportati. Anche per la piattaforma Android, quella scelta per lo sviluppo del progetto, è stata sviluppata un'applicazione simile a quella descritta. Essa prende il nome di Metroid [10] e ha come obiettivo quello di pianificare viaggi urbani sfruttando le linee pubbliche. Il suoi sviluppatori hanno anche partecipato al concorso indetto da Google denominato Android Challenge. A nostro giudizio Metroid, ancora in fase di sviluppo, ha notevoli margini di 8

9 miglioramento. Infatti nella base di dati utilizzata non sono mantenute informazioni sulla posizione delle fermate dei mezzi. É quindi reso difficile capire quale fermata è la più comoda per giungere in una determinata località. Oltre al semplice elenco degli scambi da effettuare, sarebbe stata molto utile l'integrazione di una mappa della città, in modo da visualizzare chiaramente destinazione e partenza. D'altro canto la semplicità con la quale sono mantenuti i dati utilizzati permette una facile estensione del progetto a nuove città. 1.5 Organizzazione del Documento La presente relazione è stata suddivisa in tre capitoli principali. 2.Android: il sistema operativo Il capitolo espone in modo dettagliato le caratteristiche principali del sistema operativo sul quale l'applicazione viene sviluppata. Viene qui messo in luce il carattere fortemente innovativo di Android, appositamente studiato per lo sviluppo di software in modo semplice e veloce. Viene poi descritta la modalità con la quale può essere realizzato un progetto Android utilizzando un apposito plugin per l'editor Eclipse. Infine sono evidenziate le componenti principali dell'sdk distribuito da Google. 3.L'applicazione Viene qui presentato il software realizzato nel corso del progetto. La trattazione inizia descrivendo l'architettura globale dell'applicazione e addentrandosi poi nei particolari. Sono esposte e giustificare le scelte implementative effettuate considerando i problemi incontrati nello sviluppo. Una volta descritta la modalità di recupero dei dati necessari all'esecuzione è presentato l'utilizzo che ne è fatto nella costruzione del modello della rete dei mezzi pubblici. Segue quindi l'algoritmo per il calcolo del percorso per il raggiungimento della destinazione prefissata. Sono qui esposte le semplificazioni introdotte e i criteri utilizzati per elaborare un algoritmo semplice ma che fornisca risultati affidabili e realistici. Infine è descritta l'interfaccia grafica con cui l'utente viene in contatto. Il capitolo si conclude con un esempio di utilizzo del software prodotto descrivendo nei particolari ogni fase dell'utilizzo. 4.Conclusioni e possibili sviluppi In questo capitolo sono esposte considerazioni circa il raggiungimento degli obiettivi prefissati, la qualità del percorso proposto e la funzionalità del software. Infine sono presentate eventuali soluzioni per ampliare il progetto rimuovendo alcune semplificazioni introdotte. 9

10 2 Android: il sistema operativo Android è un sistema operativo progettato per dispositivi mobili sviluppato inizialmente da Google e successivamente da Open Handset Alliance (OHA). Questa è un'alleanza di aziende composta fra le altre da: Google, Intel, HTC, Motorola, Samsung, LG, Nvidia, Qualcomm e T-Mobile, che ha il fine di sviluppare applicazioni e hardware per smartphone. Il sistema operativo è stata annunciato il 5 novembre 2007 e rilasciato il 12 novembre. La prima versione commerciale di un cellulare fornito del sistema operativo Android è stata rilasciata il 22 ottobre del 2008 negli Stati Uniti, sotto il nome di T-Mobile G1 3. L'hardware del telefono è stato realizzato dalla compagnia di Taiwan High Tech Computer (HTC). La caratteristica che rende particolarmente interessante Android è il fatto che è stato rilasciato sotto licenze open-source [11] : Apache 2.0 [12] e GPLv2 [13]. É quindi disponibile in rete anche il codice sorgente del sistema operativo 4, il quale può essere modificato e redistribuito a piacere. Questa scelta è stata presa in quanto Android è pensato per rendere facile lo sviluppo libero di applicazioni che sfruttino appieno le funzionalità. 2.1 La struttura del sistema operativo [14] Come i sistemi operativi per calcolatori fissi, anche Android è organizzato secondo il paradigma a pila. Uno schema della sua struttura è rappresentato nella figura seguente

11 1: Struttura del sistema Operativo Android Applications: la versione base di Android non presenta solamente il sistema operativo ma anche applicazioni base di frequente utilizzo come un browser, un client di posta elettronica, un'agenda per la gestione dei contatti eccetera. a esse possono essere aggiunti altri programmi non appartenenti alla distribuzione ufficiale. La filosofia della OHA riguardo lo sviluppo di nuove applicazioni può essere riassunto con la frase: All applications are created equal. Ovvero: non c'è differenza fra i prodotti ufficiali e quelli da sviluppare in modo indipendente. Tutti si basano sulle stesse librerie e hanno pari privilegi nell'accesso alle risorse messe a disposizione dal sistema operativo. Application Framework: questo livello dello stack è necessario per rendere disponibili i servizi del sistema operativo alle applicazioni al livello superiore. Come detto in precedenza queste API (Application Programming Interface) sono comuni sia alle applicazioni ufficiali che a quelle sviluppate in modo indipendente. L'obiettivo fondamentale che si è cercato di raggiungere nella progettazione di questo livello è il riuso del codice. Ovvero ogni applicazione può rendere disponibile alle altre servizi 11

12 specifici permettendo così la progettazione in modo semplice di servizi nuovi basati su quelli preesistenti. Gli elementi più importanti del framework sono: View System: ovvero l'insieme di oggetti grafici che permettono la costruzione dell'interfaccia con l'utente 5. Content Providers: un content provider è un elemento che permette la condivisione di dati fra applicazioni. La gestione dei dati memorizzati è lasciata all'implementazione del singolo provider mentre tutti devono implementare interfacce comuni per permettere l'esecuzione di query e l'inserimento di dati a ogni applicazione. Resource Managers : permettono l'accesso a tutti gli oggetti non costituiti da codice sorgente, quali immagini, file di configurazione dell'interfaccia, stringhe eccetera. Notification Managers : permettono alle applicazioni di presentare all'utente notifiche di eventi asincroni che avvengono in background. Activity Managers: gestiscono il life-cycle delle activity, le quali sono oggetti che rappresentano una singola operazione che l'utente può eseguire. Le activity, essendo la base di ogni programma sviluppato in Android, verranno descritte in modo approfondito in seguito. Libraries: le funzionalità messe a disposizione dall'application framework sono implementate da una serie di librerie scritte in C/C++; le più importanti sono: Un'implementazione della libreria standard C (libc) specificatamente implementata per i sistemi Linux di tipo embedded. Librerie per la gestione di materiale multimediale basate su PacketVideo's OpenCORE. WebKit: libreria per web browsing. SQLite: libreria di piccole dimensioni per la gestione di un database relazionale. Gestione della grafica 2D e 3D attraverso la libreria OpenGL. Android Runtime: oltre a ulteriori librerie è presente in questo sottoinsieme la Dalvik Virtual Machine, ovvero una macchina virtuale all'interno della quale sono eseguite le applicazioni. Essa esegue classi java che sono state compilate in uno specifico bytecode chiamato dex. Linux Kernel: Android è stato sviluppato a partire dalla versione 2.6 del kernel Linux. 5 Per una collezione di esempi di view consultare l'indirizzo: 12

13 Esso ha la funzione di astrarre dal livello hardware e fornire i servizi base di qualsiasi calcolatore, ovvero gestione della memoria, dei processi e del collegamento alla rete. 2.2 Lo sviluppo di un'applicazione per Android Il linguaggio di programmazione scelto dagli sviluppatori della OHA per la realizzazione di applicazioni in Android è Java. Questa scelta è particolarmente significativa in quanto Java è il linguaggio più diffuso al mondo [15]. L'obiettivo della Open Handset Alliance è quindi quello di rendere accessibile al maggior numero di programmatori la possibilità di realizzare software per Android. È da leggere in quest'ottica la scelta di Google di indire nel maggio del 2008 un concorso (Android Developer Challenge) volto a premiare le applicazioni più innovative. Le semplificazioni introdotte permettono al programmatore di concentrarsi sulla sua applicazione tralasciando le problematiche riguardanti l'interazione con l'hardware, gestite dal sistema operativo Il plugin per Eclipse e l'emulatore La realizzazione di applicazioni per Android è possibile attraverso il Software Development Kit (SDK), ovvero l'insieme di tutte le classi Java necessarie allo sviluppo. La ricerca da parte della OHA della massima semplicità nella realizzazione di nuove applicazioni ha portato alla realizzazione di una IDE (Integrated Development Environment) apposita per Android. Essa consiste in un'estensione della IDE preesistente Eclipse attraverso un plugin. Anche la scelta di Eclipse non è casuale in quanto esso è uno degli ambienti di sviluppo gratuiti più diffusi per la programmazione in java. Il plugin ADT (Android Developement Tools) non è parte integrante dell'sdk ma è estremamente utile in fase di sviluppo. Esso, ad esempio, aggiunge a Eclipse la perspective chiamata DDMS (Dalvik Debug Monitor Service) che permette di lanciare l'emulatore in modalità di debug e avere una visione di insieme sui processi attivi, l'occupazione della memoria e le prestazioni della CPU. Vi sono anche view per il controllo dei dati sul file-system dell'emulatore, dello heap e dei singoli thread di ogni processo. Di grande importanza per la rilevazione degli errori è la view chiamata LogCat la quale presenta allo sviluppatore messaggi di log inviati dall'emulatore. Attraverso la classe Log è possibile programmare l'invio di messaggi con il fine di verificare lo stato dell'applicazione e quindi determinare eventuali errori. 13

14 2: La perspective DDMS Le applicazioni sviluppate con il plugin possono essere testate in modo realistico attraverso un emulatore: un telefonino virtuale eseguito sul computer. L'emulatore, come si vede nella figura nella pagina seguente, presenta la riproduzione di un telefonino a fianco di una di una tastiera con la quale è possibile interagire con l'emulatore. Tutti i bottoni visibili sono funzionanti e hanno un effetto sull'emulatore. L'unico limite dell'emulatore consiste nel fatto che non può effettuare vere telefonate. Si possono anche simulare eventi esterni come l'arrivo di un SMS, di una chiamata o il cambiamento della posizione nel mondo del telefono. La presenza del dispositivo GPS è molto importante per applicazioni di tipo location-based. Se non si usa il plugin di Eclipse è possibile comandare l'emulatore attraverso comandi telnet inviati alla porta sulla quale è in esecuzione l'emulatore Nel caso in figura il comando per connettersi è il seguente: telnet localhost

15 3: L'emulatore del sistema operativo Android 15

16 2.2.2 Un progetto Android per Eclipse 4: La struttura di un progetto Android in Eclipse La struttura di un progetto Android sviluppato con il plugin di Eclipse è qui riportata nell'immagine a fianco. Nella cartella src sono contenute tutte le classi java utilizzate per lo sviluppo del progetto. Molto interessante è la cartella chiamata res. In essa sono contenute tutte le risorse non costituite da codice sorgente utilizzate dall'applicazione. Esse sono suddivise in cartelle: Drawable raccoglie tutti gli elementi che possono essere utilizzati come icone o in generale disegnati sullo schermo. Sono accettati tre tipi di oggetti: immagini (di solito in formato png o jpg), definizioni di colori attraverso file xml e immagini di tipo NinePatch (file png a cui è associato un xml che ne definisce proprietà riguardanti la deformazione che può subire). Layout contiene tutti i file per la definizione delle interfacce utente delle differenti activity specificate in formato xml. Ogni file contiene la definizione di una schermata o di una parte di essa. Essi sono associati alla corrispondente activity attraverso l'invocazione del metodo Activity.setContentView() il quale prende come parametro un riferimento all'xml desiderato. Attraverso l'utilizzo dei tag propri di xml è possibile creare una struttura ad albero che rappresenta l'interfaccia grafica. a ogni elemento proprio di un'interfaccia corrisponde un tag. Ad esempio esistono i tag <TextView> e <Button> ma anche elementi che ne raggruppano di altri al loro interno come <LinearLayout>, ordinandoli secondo un criterio prestabilito. Per l'elenco completo degli elementi che possono essere utilizzati nella definizione di un layout e dei corrispondenti tag xml consultare l'indirizzo: Values raccoglie valori semplici che sono utilizzati da molti elementi all'interno dell'applicazione. Si possono inserire tre tipi di oggetti: stringhe definizioni di colori e di misure di lunghezza. Se si usa il plugin di Eclipse tutte le classi sviluppate e tutte le risorse saranno 16

17 automaticamente raccolte in un singolo file di estensione.apk (Android PacKage). Esso sarà l'unico file necessario per l'installazione dell'applicazione su un emulatore come quello descritto in precedenza. Questa soluzione rende estremamente semplice la condivisione di programmi. Prima di essere inseriti nel file.apk tutte le risorse utilizzate dall'utente e inserite nella cartella rsc verranno prima compilate dal compilatore aapt (Android Asset Packaging Tool) in file binari. Ancora una volta ADT si rivela estremamente comodo in quanto invoca in modo automatico il tool in fase di deploy dell'applicazione. L'ultimo file rimasto da descrivere è quello chiamato AndroidManifest.xml. Esso deve essere specificato in ogni programma e fornisce informazioni di carattere generale. Per esempio devono qui essere dichiarati le Activity e i Service utilizzati, i permessi che devono essere garantiti all'applicazione per l'esecuzione dei suoi compiti, oppure riferimenti a librerie necessarie per specifiche funzionalità. Sono qui definiti anche gli IntentFilter spiegati nello specifico nei paragrafi successivi. 17

18 2.2.3 Programmare in Android [16] Si presentano ora i concetti e i tipi di dato astratto fondamentali per lo sviluppo di un'applicazione Android. Activity [17] Ogni singola operazione che l'utente può svolgere è rappresentata da una Activity. La creazione di una nuova azione prevede la definizione di una nuova classe, la quale estende la classe Activity che si trova nel package android.app dell'sdk. La maggior parte delle Activity prevede un'interazione con l'utente. Si rende quindi necessaria la creazione di una interfaccia grafica e la sua associazione alla corrispondente Activity. La definizione della struttura dell'interfaccia è stata spiegata nel capitolo precedente. La Dalvik Virtual Machine mantiene in memoria una pila delle attività invocate dall'utente durante l'utilizzo dell'applicazione. Ogni volta che l'utente invoca una nuova schermata (ovvero un'attività) essa viene inserita sulla cima della pila. Sul fondo si troveranno invece le attività meno recenti, che non sono visualizzate attualmente sullo schermo. Questo meccanismo rende molto facile e veloce il browsing fra le differenti schermate. È quindi molto importante comprendere a fondo il cosiddetto life-cycle delle activity, ovvero la gestione degli stati nei quali esse si possono trovare. Tre sono le modalità principali nelle quali un'activity si può trovare: Running: l'activity è visualizzata sullo schermo e l'utente interagisce con essa. Paused: l'utente non può più interagire con l'attività ma il suo layout è ancora visibile (ad esempio sopra di esso appare una finestra di dialogo). Le activity in questo stato mantengono tutte le informazioni riguardanti il loro stato e possono essere terminate dalla DVM nel caso di scarsità di risorse. Stopped: quando l'utente passa da un'activity a un'altra, la prima è posta in stato di stop. Ciò significa che una nuova activity verrà posta sulla cima della pila. Le attività in stop sono le prime a essere terminate in caso di necessità di ulteriori risorse. La figura seguente mostra i passaggi di stato di activity. I rettangoli rappresentano le chiamate ai metodi di callback, ognuno dei quali svolge una funzione specifica nell'ambito del ciclo di vita dell'applicazione. 18

19 5: Il ciclo di vita di un'activity 19

20 Tutti i seguenti metodi possono essere oggetto di override da parte del programmatore, che può quindi adattarli alle proprie esigenze. oncreate(bundle): questo metodo è invocato dalla DVM quando l'activity viene creata per la prima volta ed è necessario alla sua inizializzazione. Le operazioni fondamentali che vengono svolte in questo metodo riguardano la definizione dell'interfaccia grafica attraverso un file.xml, l'associazione di ogni elemento dell'interfaccia alla corrispondente azione desiderata e l'inizializzazione delle strutture dati utilizzate quali liste e basi di dati. L'oggetto di tipo Bundle passato come parametro è necessario al passaggio di informazioni riguardanti lo stato dell'applicazione. onpause(): ogni volta che l'utente lascia un'activity la DVM invoca questo metodo nel quale il programmatore dovrà aver specificato operazioni riguardanti il salvataggio dello stato raggiunto dall'applicazione. onstart(): quando l'activity è visualizzata sullo schermo del telefono viene invocato questo metodo. onrestart(): metodo chiamato ogni volta che l'activity diventa visibile all'utente dopo che è stata posta nello stato paused. Subito dopo la terminazione del metodo viene invocato onstart(). onresume(): il metodo è chiamato subito prima che l'activity sia posta sulla cima della pila e che quindi si possibile per l'utente un'interazione. onstop(): quando un'activity viene oscurata da un'altra viene invocato questo metodo. ondestroy(): il metodo è lanciato subito prima della distruzione finale dell'activity. Nello schema si possono qui individuare 3 cicli: ciclo di vita: ricadono in questo insieme tutte le operazioni comprese fra le chiamate ai metodi oncreate(), nel quale si allocano tutte le risorse necessarie, e ondestroy(), nel quale le risorse sono rilasciate. ciclo di visibilità: compreso fra i metodi onstart() e onstop(). In questo periodo di tempo l'interfaccia dell'actitvity è sì visibile all'utente ma può non essere possibile l'interazione con essa a causa della presenza di altre activity in 20

21 primo piano. ciclo di vita in primo piano: in questo insieme sono comprese tutte le operazioni fra i metodi onresume() ed onpause(). L'Activity è qui completamente disponibile all'utente il quale può interagire con essa, ad esempio riempiendo dei form di input. Esistono due modi per lanciare un'activity. Essi si identificano nei due metodi startactivity(intent) e startactivityonresult(intent,int). Il primo permette il semplice lancio di un'activity identificata dall'oggetto di tipo Intent (spiegato nel paragrafo successivo). Il secondo metodo invece prevede che la classe invocata ritorni un risultato; esso sarà disponibile facendo override, nel chiamante, del metodo onactivityresult(int,int,result) che verrà invocato alla terminazione dell'attività chiamata. Intent [18] Questo tipo di dato rappresenta la descrizione astratta di un'operazione che può essere compiuta. Esso può essere utilizzato per lanciare nuove Activity o nuovi Service. In ogni istanza di un Intent è necessario specificare almeno due parametri: l'azione che si intende compiere ad esempio: ACTION_VIEW o ACTION_EDIT. I dati necessari all'esecuzione dell'azione identificati da un URI (Uniform Resource Identifier). La definizione di un Intent può avvenire quindi nel seguente modo: Intent intent = new Intent (Intent.ACTION_VIEW, content://contacts/1); Questo intent permetterà di visualizzare le informazioni caratteristiche del contatto identificato dal numero 1. Una volta creato l'oggetto è necessario avviare l'activity che possa effettivamente visualizzare queste informazioni. Questa operazione è possibile attraverso: startactivity(intent); L'associazione fra intent e activity avviene grazie alla definizione di un IntentFilter. Esso consiste in una dichiarazione di essere in grado di gestire una determinata richiesta e deve essere specificato nel file AndroidManifest.xml associato a ogni applicazione. L'utilizzo degli 21

22 IntentFilters è particolarmente utile in quanto permette di riutilizzare codice già scritto in precedenza per assolvere dei compiti semplici come ottenere informazioni riguardo un contatto dalla rubrica. È importante anche notare che il chiamante ignora completamente come il compito sia assolto, in quanto conosce solo l'interfaccia pubblicata dall'intentfilter. Service [19] Un Service è un componente dell'applicazione che viene eseguito in background per un periodo di tempo indefinito, e che non ha quindi interazione diretta con l'utente. É importante notare che il codice contenuto in una classe che estende Service è eseguito nel thread principale dell'applicazione. Nel caso in cui siano eseguite operazioni che utilizzano molto la CPU o la connessione a una rete è quindi consigliabile la creazione di un nuovo thread. Come per le activity anche nei Service sono presenti metodi di callback eseguiti in momenti specifici dell'esecuzione. Essi sono ad esempio oncreate(), ondestroy(), dal significato affine a quello specificato per la classe Activity. Vi sono due modi per avviare un service: All'invocazione del metodo Context.startService() una nuova istanza di un service è creata (con il metodo oncreate()) e lanciata ( con il metodo onstart(intent,int)). L'esecuzione prosegue fino alla chiamata del metodo Context.stopService(). Se il metodo Context.onBind() è invocato viene instaurata una connessione persistente a un o specifico servizio il quale, se non esiste già, può venir creato. In questo caso il metodo onstart() non è chiamato. Il chiamante otterrà così un identificativo del Service, cosa che gli permetterà di effettuare richieste. Un Service può essere al tempo stesso avviato con il metodo onstart() e oggetto di connessioni. Esso potrà essere terminato solo quando non ci saranno più connessioni attive e il metodo Context.stopService() non verrà chiamato. Content Provider [20] Gli oggetti di tipo ContentProvider hanno la funzione di garantire l'accesso a dati condivisi da più applicazioni. L'effettiva implementazione del salvataggio dei dati in memoria di massa non è specificato ed è lasciata al programmatore. Tutti i content 22

23 provider però devono implementare interfacce predefinite che specificano il modo col quale le query possono essere effettuate e la modalità di presentazione del risultato. I tipi di dati salvati possono essere di vario tipo 6 : contatti telefonici, file audio e video. Ogni ContentProvider fornisce un URI ai client che vogliono utilizzare i suoi dati; è attraverso questa stringa che è possibile effettuare richieste o inserire dati. Esempio: L'URI content://contacts/people/ permette di ottenere tutti gli elementi della tabella people; invece l'url content://contacts/people/10 ritorna la singola persona identificata dal codice 10. L'inserimento di dati invece avviene specificando oltre a un URI anche una mappa che fa corrispondere alle colonne della tabella relazionale i campi della riga da inserire Altri elementi utilizzati nel progetto Le Mappe Nel tipo di applicazione sviluppata in questo progetto è di fondamentale importanza la visualizzazione di una mappa per permettere all'utente di orientarsi all'interno della città. L'SDK di Android rende possibile l'integrazione di una mappa all'interno dell'applicazione. Per questo scopo è fornita una particolare sottoclasse di Activity chiamata MapActivity. Come per la sua superclasse sarà necessario specificarne il layout attraverso un file xml. Esso, oltre ai normali elementi grafici, conterrà un tag di nome <com.google.android.maps.mapview> che corrisponde a un oggetto della classe MapView, la quale rappresenta la mappa vera e propria. MapView fornisce accesso ai dati di Google Maps, per questo per utilizzarla è necessario possedere una chiave chiamata Maps API Key 7 propria per ogni sviluppatore, che la può usare in tutte le sue applicazioni. Attraverso il metodo ereditato dalla classe Activity findviewbyid() il programmatore può istanziare un oggetto MapView e lavorare su di esso. Molto utile è un classe di supporto chiamata MapController che permette di impostare alcuni parametri della mappa 6 Per consultare l'elenco dei tipi di dato astratti che rappresentano i dati memorizzati in un ContentProvider si veda:

24 quali le coordinate del centro e il livello di ingrandimento. Un oggetto di questo tipo si può ottenere a partire da MapView attraverso il metodo getcontroller(). Il GPS L'SDK di Android mette a disposizione alcune classi per permettere al programmatore di ottenere informazioni riguardanti la posizione attuale del telefono (e quindi del suo proprietario) nel mondo. Lo strumento a disposizione è il rilevatore GPS (Global Positioning System). Esso permette di ottenere le coordinate geografiche del luogo dove si trova il telefono sotto forma di latitudine e longitudine. Realizzare programmi che sfruttino questa potente funzionalità è molto facile nell'ambiente Android. La classe che permette di ottenere le due coordinate è chiamata LocationManager 8 ed è istanziabile nel seguente modo: LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVIC E); Per poter utilizzare questa funzionalità è necessario garantire un permesso particolare all'applicazione specificando nel file AndroidManifest.xml il seguente tag. <uses permission android:name="android.permission.access_fine_location" /> Una volta ottenuto l'oggetto lm da esso è possibile ottenere un'istanza della classe Location. Location loc=lm.getlastknownlocation (LocationManager.GPS_PROVIDER); Location rappresenta un preciso luogo geografico in un determinato momento. Attraverso i due metodi getlatitude() e getlongitude() è possibile ottenere le coordinate del luogo rappresentato. Questa funzionalità può essere testata sull'emulatore anche se non possiede una connessione alla rete GPS. Sarà necessario simulare il funzionamento di un LocationProvier. Ciò è possibile in molti modi: Sotto la voce Location Controls nella finestra Emulator Control della perspective DDMS fornita dal plugin ADT di Eclipse si specificano direttamente le coordinate del luogo desiderato, oppure si fa l'upload di file di formato KML o 8 24

25 GPX contenenti anche molte coordinate. Inviando attraverso un comando telenet direttamente le coordinate all'emulatore. Una volta stabilita la connessione eseguire il seguente comando: geo fix longitude latitude Il DataBase SQLite [21], [22] Un database SQLite è un DBMS relazionale di piccole dimensioni perfetto per essere utilizzato da un'applicazione per smart-phone. Esso non è un processo indipendente che si basa sul paradigma client-server come i normali DBMS quali MySQL (utilizzato in un altro ambito del progetto), ma una libreria parte integrante del programma realizzato. È quindi possibile accedere ai dati memorizzati attraverso semplici chiamate a metodi, molto più veloci rispetto alla comunicazione fra processi. Il database vero e proprio è memorizzato in un file il quale viene messo in lock ogni qualvolta una query viene eseguita. La classe dell'sdk che rappresenta un database SQLite si chiama: SQLiteDatabase. Essa mette a disposizione metodi quali query, delete e update che permettono una completa gestione del database. Di grande utilità è il tipo di dato astratto SQLiteOpenHelper. Esso gestisce le operazioni elementari da eseguire sul database. La classe si occupa ad esempio di aprire il database, o di crearlo se esso non esiste, e di organizzare le transizioni a seguito di upgrade (ad esempio un'aggiunta o una rimozione di una tabella). Due database SQLite sono utilizzati nell'applicazione sviluppata per gestire la memorizzazione delle località frequentate e per permettere il passaggio di parametri riguardanti il percorso generato da un'activity a un'altra. 25

26 3 L'applicazione Questo capitolo ha il fine di descrivere in modo approfondito le caratteristiche fondamentali dell'applicazione sviluppata in questo progetto. Verranno quindi presi in considerazione elementi quali la costruzione del modello della rete dei mezzi pubblici cittadini; l'elaborazione dell'algoritmo di calcolo del percorso più veloce e la presentazione del risultato all'utente. Insieme alle soluzioni implementate verranno presentati anche le problematiche affrontate durante lo sviluppo e come queste sono state superate giungendo alla soluzione realizzata. 3.1 L'architettura dell'applicazione L'applicazione è stata strutturata a livelli. Ognuno di essi raggruppa tipi di dato astratto che hanno funzionalità e scopi simili. Una classe appartenente a un dato livello può comunicare solamente con quelle appartenenti ai livelli contigui. Questa architettura ha diversi vantaggi, apprezzabili soprattutto in fase di sviluppo e testing. Infatti è possibile cambiare l'effettiva implementazione delle classi di un dato livello se si mantiene l'interfaccia che esse presentano agli altri. Questo è evidente per la comunicazione con il database remoto. L'applicazione non è infatti legata al particolare tipo di database usato ma può essere estesa in modo semplice come descritto nel capitolo dedicato. Per quanto riguarda il debugging esso può essere condotto in modo più semplice analizzando un livello per volta. La seguente tabella presenta la struttura dell'architettura. Livello Presentazione Modello della rete dei mezzi pubblici e Algoritmo Rappresentazione del database Elaborazione delle query e Connessione con il Database Classi Principali LocationsInsertion, StopList, Map, Error, RowEntry, EntryView, PlacesOverlays, StopsOverlays, LocalDataBase MetroLines,TramLines,Station,Node,MetroNode, TramNode, Problem, Path, PathCreator DBInterface; RemoteDB SQLQueryUtil, ToSql Le classi in corsivo nel livello Presentazione estendono un'activity. 26

27 3.2 Il modello della rete dei servizi pubblici Per realizzare un algoritmo che computa un percorso fra due luoghi di una città è necessario possedere una struttura completa della rete dei mezzi pubblici. Dovranno quindi essere note le posizioni geografiche di tutte le fermate e il loro numero d'ordine nelle linee che le utilizzano. Uno dei problemi maggiori incontrati durante la progettazione e lo sviluppo è stato proprio ottenere queste informazioni. Con riferimento a Milano, la città utilizzata come esempio, parte di questi dati sono disponibili sul sito dell'azienda locale dei trasporti pubblici: Nel sito è contenuto l'intero elenco delle linee dei mezzi pubblici, le corrispondenti fermate e gli orari. É stato però deciso di non utilizzare questa fonte per molti motivi: L'ATM non mette a disposizione le coordinate geografiche in latitudine e longitudine delle stazioni. Questi dati sono però fondamentali per la determinazione delle distanze. Ovviamente l'accesso al database di back-end dell'applicazione web è precluso ai normali utenti. Recuperare le informazioni di cui si ha bisogno da un sito internet attraverso il parsing di una risposta HTML non è un modo corretto di procedere. La controindicazione più grave riguarda eventuali modifiche che il sito può subire in fase di manutenzione. Queste comporterebbero a una completa riprogettazione del parser. L'ipotesi di utilizzare il sito ATM è stata per questi motivi scartata. Si è quindi cercata un'altra fonte per recuperare i dati necessari, in particolare le coordinate delle stazioni e delle fermate. Si è quindi rivolta l'attenzione a un progetto open-source: OpenStreetMap OpenStreetMap [23] Il progetto OpenStreetMap ha lo scopo di realizzare mappe del mondo attraverso la libera collaborazione di volontari. Per quanto riguarda il recupero di informazioni sulle fermate dei mezzi, quello che interessa non sono le mappe in sé ma piuttosto gli elementi topologici che le compongono. Tutte le cartine di OpenStreetMap sono costruite a partire dai dati contenuti in un database chiamato OSM Database. È possibile interrogare la base di dati effettuando una richiesta HTTP e ottenendo una risposta in formato testuale. I parametri della query da 27

28 inoltrare al database devono essere tutti inseriti nell'url. Un esempio di indirizzo che permette di ottenere informazioni riguardo le stazioni della metropolitana in una zona centrale di Milano è il seguente: [bbox= , , , ] Nell'URL si possono individuare due elementi fondamentali: node: questa parola chiave permette di specificare l'elemento topologico che si intende ricercare nel database. In questo caso vengo cercate stazioni della metropolitana: verrà quindi inserita la parola chiave subway. L'elenco completo degli elementi che possono essere recuperati dal database è consultabile all'indirizzo: bbox: questo predicato è necessario a definire un rettangolo di superficie terrestre nel quale effettuare la ricerca. Esso dovrà essere specificato nella forma: [bbox=left,bottom,right,top], dove i left e right sono gli estremi della latitudine, mentre bottom e top sono gli estremi della longitudine. La risposta dal server è in formato xml; in cui il tag <node> identifica un singolo elemento topografico. Quello riportato di seguito è un passaggio della risposta fornita alla richiesta descritta in precedenza. <node id=' ' lat=' ' lon=' ' user='ilrobi' osmxapi:users='bh3u4m,edom,ilrobi' timestamp=' T13:58:30Z' > <tag k='name' v='mm3 Zara'/> <tag k='railway' v='station'/> </node> Come si nota <node> contiene molte informazioni riguardo la stazione come le coordinate, il nome, la linea e l'identificativo dell'utente di OpenStreetMap che ha inserito il dato. Questa struttura del file xml presenta però molti problemi a essere analizzata da un parser. Non è specificata la linea alla quale la stazione appartiene. Nel caso di esempio essa è stata inserita nel nome, ma questa non è una convenzione: è stata semplicemente la scelta dell'utente. Non esiste infatti un tag xml che identifica la linea. Pur avendo specificato nell'url la variabile subway vengono incluse nella risposta 28

29 stazioni diverse da quelle della metropolitana. Non è possibile stabilire un ordinamento delle stazioni; non vi è presente infatti nessuna informazione riguardo la posizione della fermata all'interno della linea. In definitiva l'insieme dei tag messi a disposizione per la specifica dei luoghi rilevanti è a nostro giudizio insufficiente per effettuare un'analisi programmatica dei file xml forniti. Per questa ragione è stata scartata l'ipotesi di utilizzare OpenStreetMap come database. Per risolvere il problema del reperimento di informazioni è stato deciso di creare un database costruito appositamente per le nostre esigenze. Esso non conterrà l'insieme di tutte le linee di tram o metropolitana ma solo una piccola parte. Le tratte coperte saranno però complete, ovvero da esso sarà possibile costruire il modello. Oltre alle informazioni topologiche su fermate e stazioni esso conterrà dati riguardo gli orari dei mezzi e eventuali interruzioni sulle linee Il Database Il database è di tipo relazionale ed è stato realizzato utilizzando la tecnologia MySql. La base di dati è composta di molte tabelle, ognuna delle quali rappresenta un particolare insieme elementi per la costruzione del modello. Qui di seguito è riportato il codice SQL che definisce la strutture delle tabelle. Metro Stops e Tram Stops Queste due tabelle sono simili fra loro in quanto rappresentano e mantengono in memoria le informazioni riguardanti rispettivamente le stazioni della metropolitana e le fermate del tram. create table metro_stops ( stop_name varchar(28) not null, line tinyint not null, stop_number smallint not null, latitude real not null, longitude real not null, terminal boolean not null, branch boolean not null, primary key (stop_name,line)); 29

30 create table tram_stops ( stop_name varchar(28) not null, line tinyint not null, stop_number smallint not null, latitude real not null, longitude real not null, terminal boolean not null, primary key (stop_name,line)); Oltre al nome e alla linea a cui appartiene la fermata sono memorizzati il numero della fermata all'interno della linea, le coordinate geografiche in latitudine longitudine, un flag per segnalare se la fermata è un capolinea e uno per indicare la presenza in quella stazione di diramazioni della linea. La chiave è composta dai due campi stop_name e line. Due aspetti sono da evidenziare riguardo questa scelta di salvataggio dei dati. Il primo riguarda le stazioni comuni a più linee. Per ognuna di essa saranno presenti nel database tante entry quante sono le linee che usano quella fermata. Ognuna di queste si distinguerà dalle altre solo per il campo line. Il secondo aspetto riguarda la numerazione delle fermate in corrispondenza di biforcazioni di una linea (cosa che a Milano avviene per due tratte della metropolitana). In questi casi la numerazione continua in modo progressivo aggiungendo al numero computato nella maniera normale una cifra in più. Essa sarà 0 per la prima biforcazione (la quale è scelta in modo arbitrario), 1 per la seconda, 2 per la terza e così via. Questa scelta permette di mantenere un ordine crescente nella numerazione delle fermate. 30

31 Time Table La tabella Time Table memorizza per ogni fermata del tram gli orari dei passaggi. Il database non rispecchia il reale orario dei tram in quanto esso è stato realizzato a puro scopo dimostrativo. create table time_table( stop_name varchar(28) not null, line tinyint not null, summer boolean not null, working_day boolean not null, hour_of_day tinyint not null, minutes varchar(50) not null, primary key (stop_name, line,summer,working_day), foreign key (stop_name,line) references tram_stops(stop_name,line) on update cascade on delete cascade); I due campi stop_name e line sono necessari per individuare in modo univoco la fermata alla quale ci si riferisce. I due flag summer e working_day servono a discriminare fra orario estivo ed invernale e fra giorno festivo e feriale. hour_of_day identifica l'ora all'interno della quale si intende prendere il tram. In corrispondenza di ogni ora è salvata una stringa al cui interno sono salvati i minuti dei passaggi sotto forma di interi separati da virgole. Effettuando una query a questa tabella si otterranno quindi i minuti dei passaggi del tram per l'ora desiderata. 31

32 Metro Problem e Tram Problem Queste due tabelle della base di dati memorizzano le informazioni riguardanti eventuali problemi sulle linee di tram e metro. create table metro_problem( first_stop_name varchar(28) not null, last_stop_name varchar(28) not null, line tinyint not null, start_date date not null, end_date date not null, start_time time not null, end_time time not null, description varchar(100), primary key (line,start_date,first_stop_name,last_stop_name), foreign key (first_stop_name, line) references metro_stops(stop_name,line) on update cascade on delete cascade, foreign key (last_stop_name, line) references metro_stops(stop_name,line) on update cascade on delete cascade) Per poter individuare in modo preciso i differenti problemi che possono verificarsi sono qui memorizzate la prima e l'ultima stazione in cui l'inconveniente si verifica (in caso di uno sciopero saranno i due capolinea). Vi sono poi i riferimenti alle date e agli orari di inizio di fine presunta del malfunzionamento o dello sciopero. 32

33 Per simulare in modo realistico la presenza di un sito remoto dal quale tutte le informazioni sopra riportate sono recuperate è stata creata un'applicazione web che funge da interfaccia al database. Non è quindi possibile effettuare delle query direttamente alla base di dati; esse verranno inoltrate dall'applicazione sullo smart-phone alla web-application la quale le interpreterà e le inoltrerà al server MySql fornendo poi il risultato. Questo è stato realizzato utilizzando la tecnologia Servlet di Java [24]. Una servlet è un oggetto eseguibile da un application-server che svolge una specifica funzione a seguito di una richiesta. Nell'applicazione server qui sviluppata la classe QuerySrv, estendendo HTTPServlet, avrà il compito di interpretare le richieste del client e interrogare il database. La richiesta HTTP proveniente dal client dovrà contente i parametri per poter effettuare la richiesta SQL. Essi sono 4 e corrispondono ai campi di una query SQL: select, from, where e order by. La classe di supporto DBUtil avrà il compito di effettuare la richiesta vera e propria. Il collegamento fra la business-logic e i dati è permesso dalle classi dell'api JDBC (Java DataBase Connectivity) [25]. Viene ora presentata la procedura utilizzata per accedere e interrogare il server MySql. La classe JDBC che permette l'accesso al database è chiamata Connection. Per ottenerne un'istanza è necessario possedere un account sul server MySql (ovvero un username ed una password) e conoscere la porta sulla quale esso è in ascolto. Il tipo di dato astratto Statement rappresenta un'istruzione in codice Sql che viene inoltrata al database a cui si è connessi. É possibile ottenere un oggetto di questo tipo invocando il metodo connection.createstatement() una volta avvenuto il collegamento con il server. L'istruzione da eseguire verrà specificata attraverso il metodo statement.execute() o statement.executequery() sotto forma di String a partire dai dati forniti in input dall'utente attraverso l'oggetto request. Il risultato delle query effettuate sarà del tipo ResultSet. Esso verrà quindi scansionato per ottenerne una String. Per identificare i campi delle differenti colonne in fase di lettura essi sono divisi fra di loro da un simbolo separatore convenzionale. La stringa testuale così elaborata sarà quindi la risposta alla richiesta effettuata. La risposta arriverà quindi al client in formato testuale in modo che se ne possa effettuare il parsing in modo semplice. 33

34 3.2.3 La struttura del modello La classe fondamentale per la costruzione del modello si chiama Station. Essa eredita dalla classe dell'sdk Location contenuta nel package android.location descritta in precedenza. Questo permette di riutilizzare attributi e metodi della superclasse senza re implementarne di nuovi. In particolare verranno utilizzati i metodi set e get degli attributi double latitude e longitude; e il metodo float distanceto(location dest). Esso ritorna la distanza in metri fra la località che lo implementa e quella passata come parametro. Si rivelerà molto utile nella elaborazione del percorso più breve. La classe Station aggiunge quindi a questi attributi variabili per la memorizzazione dei dati ricavati dalla lettura del database. Essi sono: private String name; private int line; private int number; private boolean terminal; private boolean branch; Una volta rappresentate le stazioni è necessario costruire un modello per le linee dei diversi tipi di mezzi pubblici. A questo scopo sono state introdotte le due classi MetroLines e TramLines. Esse possiedono gli attributi tram_stops e metro_stops i quali sono del tipo ArrayList<Station>. Queste due liste conterranno quindi tutte le istanze della classe Station utili per la determinazione del percorso da compiere. È da notare che le due liste contengono tutte le stazioni (o della metropolitana o dei tram), non vi è quindi distinzione fra le differenti linee. Inoltre l'ordine con il quale le stazioni sono raccolte non rispecchia la successione delle fermate su una linea; ma l'ordinamento alfabetico. La struttura sopra descritta è riassunta nel seguente schema UML. 34

35 6: La struttura del Modello 35

36 3.2.4 La comunicazione con il Database La classe che mette a disposizione i metodi per la comunicazione con il database è chiamata ToSql. Essa implementa l'interfaccia DBInterface la quale contiene tutti i metodi pubblici indispensabili per il recupero delle informazioni necessarie. I metodi della classe ToSql non possono essere chiamati direttamente dalle classi di livello più alto. Al loro posto devono essere invocati quelli di RemoteDB, che implementa anch'esso l'interfaccia DBInterface. Questo è stato fatto in quanto non si è voluto legare il funzionamento dei livelli superiori dell'applicazione a una specifica implementazione del collegamento con il database. Infatti se si decidesse di sostituire la classe ToSql si dovrebbe cambiare solo una riga di codice nella classe RemoteDB mentre le classi ai livelli superiori rimarrebbero invariate. Nel costruttore delle classi che compongono il modello quali TramLines e MetroLines vi sarà quindi un'invocazione di un metodo di RemoteDB che chiamerà a sua volta ToSql per ottenere le informazioni richieste. In ogni metodo di RemoteDB è presente un'invocazione del corrispondente in ToSql. Per evitare la creazione di oggetti di tipo RemoteDB che risulterebbero inutili ai fini pratici questa classe implementa il pattern architetturale chiamato Singleton [26]. Il quale prevede di nascondere il costruttore di una classe e rendere pubblico solo il metodo getinstance() che ritorna un nuovo oggetto o fornire un riferimento a quello già esistente. Viene qui di seguito descritta la procedura, implementata dalla classe ToSql, con la quale è possibile effettuare richieste a un server attraverso il protocollo HTTP. Ciò è garantito dalle classi del package dell'sdk org.apache.http. La classe DefaultHttpClient identifica un generico client HTTP. È attraverso di essa che possono quindi essere inoltrate le richieste ed ottenere le risposte. Il tipo HttpPost identifica una request inoltrata al metodo POST del protocollo, mentre HttpResponse rappresenta ovviamente la risposta ritornata. Una volta inizializzati gli oggetti di tipo DefaultHttpClient e HttpPost è necessario inserire nella richiesta i dati di input, ovvero i parametri della query. A questo scopo si utilizza la classe NameValuePair, una mappa che fa corrispondere due stringhe fra loro: ovvero il nome ed il valore di un parametro. É possibile ora inoltrare la richiesta che verrà elaborata dalla servlet descritta in precedenza. Il metodo per fare ciò è: http_client.execute(request). L'oggetto 36

37 HttpResponse ritornato è quindi trasformato in una String ed è pronto per essere analizzato. 37

38 7: La comunicazione con il DataBase 38

39 Per meglio visualizzare il procedimento di costruzione del modello della rete dei mezzi pubblici e mettere in evidenza la suddivisione in livelli viene presentato il seguente sequence diagam. 8: Sequence diagram della costruzione del modello 39

40 3.3 L'algoritmo di calcolo del percorso consigliato Introduzione L'algoritmo di calcolo del percorso è la parte del programma che genera l'itinerario attraverso le linee di metro e tram per raggiungere punto prestabilito dall'utente. L'algoritmo è contenuto nella classe PathCreator e il percorso viene generato attraverso il metodo: PathCreator.generatePath(double from_x, double from_y, double to_x, double to_y). generatepath() prende in input le coordinate x (longitudine) e y (latitudine) rispettivamente di origine e destinazione e ritorna una lista delle stazioni di snodo che l'utente deve attraversare per raggiungere una destinazione. Vengono qui definite stazioni snodo quelle in cui si incrociano più linee di mezzi pubblici. Esse permettono quindi di cambiare linea in modo da utilizzare la migliore per raggiungere il punto desiderato La modellizzazione delle stazioni Per rappresentare nel modo migliore una stazione di snodo l'algoritmo utilizza la classe Node. Essa permette di gestire la relazione tra le differenti linee che attraversano una stazione di scambio. In particolare sono mantenuti riferimenti, sotto forma di array, ai numeri delle linee che si incrociano e al numero d'ordine della stazione all'interno della linea. La classe Node è estesa da MetroNode e TramNode; le quali identificano rispettivamente uno snodo per la metropolitana e per il tram. Questa struttura introdotta semplifica il calcolo dei percorsi racchiudendo l'interconnessione tra le varie linee dei mezzi in un'unica classe. Si rende così semplice ottenere informazioni riguardanti la presenza o meno di una linea in una determinata stazione, il fatto che che ci sia una deviazione e il numero d'ordine. 40

41 9: La classe Node e le sue sottoclassi Ecco una generale spiegazione su ogni metodo delle classi: getstations() ritorna un ArrayList<Station> contenente una Station per ogni linea presente in quel nodo. getstation(int line) ritorna l'oggetto Station relativo alla linea passata come parametro. getstationnumber(int line) ritorna il numero della stazione rappresentata dall'oggetto Node sulla linea line. addstation(station st) aggiunge una linea a un nodo. Come parametro viene fornito un oggetto di tipo Station che rappresenta la stazione sulla linea. Questo metodo è oggetto di override nella classe MetroNode in quando le linee della metropolitana possiedono delle biforcazioni e si deve quindi gestire in modo corretto il numero d'ordine. hasline(int line) ritorna un boolean che identifica la presenza o meno di una linea sul nodo sulla quale è chiamato. La classe MetroNode inoltre ha due metodi in più: isdeviation(int line) ritorna un boolean indicante se il MetroNode è o meno una biforcazione di linea sulla linea passata come parametro. Per esempio, con 41

42 riferimento a Milano, la città presa in considerazione, Cascina Gobba è una biforcazione sulla linea della metro 2 e una chiamata a gobba_node.isdeviation(2) ritornerebbe true. getbranch(int line) ritorna un intero: il numero del ramo in cui la stazione si trova sulla linea passata come parametro. Se la stazione non si trova su alcun ramo verrà ritornato il valore 0. Come esempio la stazione di Cologno Nord si trova sul ramo 1 della linea 2, quindi una ipotetica chiamata a cologno_node.getbranch(2) ritornerebbe 1. Entrambe le sottoclassi MetroNode e TramNode hanno poi un attributo public, chiamato LINES_NUMBER di tipo int, che specifica il numero di linee totali rispettivamente sul sistema delle metro e sul sistema dei tram considerato La scelta del mezzo e del percorso I mezzi a disposizione dell'utente sono due: Metropolitana e Tram. L'algoritmo tende sempre e comunque di preferire il mezzo che riduce al minimo il percorso a piedi dell'utente. Esso è calcolato in base alla distanza che separa il viaggiatore dalla fermata più vicina l'ultima fermata dalla destinazione. L'algoritmo supporta anche la generazione di percorsi misti, ossia con cambio di mezzo da tram a metro o viceversa. Si introduce qui una semplificazione che prevede che sia possibile effettuare un solo cambio di mezzo, in quanto cambiare più volte può essere oneroso per l'utente. Il criterio che l'algoritmo segue per la generazione dei percorsi misti è il medesimo seguito per i percorsi semplici, ossia la riduzione al minimo del percorso a piedi dell'utente. Per esempio, se la destinazione si trova vicino a una stazione della metropolitana e l'utente è vicino a una fermata del tram allora verrà generato un percorso misto che prevederà il tram come primo mezzo e terminerà con la metro. Questo sempre che la differenza di distanza tra la stazione terminale di tram e metro sia sufficientemente ampia, altrimenti viene scelto un percorso semplice. Come già indicato, il percorso viene calcolato dal metodo generatepath(double from_x, double from_y, double to_x, double to_y), che ritorna al chiamante un ArrayList<Station> contenente tutti i punti di scambio da effettuare sulla rete di trasporto. 42

43 Ad esempio, se il percorso comporta la partenza dalla stazione di San Babila linea 1 e l'arrivo a Centrale FS linea 3 sulla rete metropolitana l'arraylist ritornato conterrà gli oggetti Station rappresentanti le stazioni di partenza e arrivo (San Babila L1 e Centrale FS L3) rispettivamente come primo e ultimo elemento della lista, e poi tutte le stazioni di scambio tra una linea e l'altra che, nel caso descritto sarebbe semplicemente Duomo. 10: Esempio di percorso Nell'ArrayList vengono anche specificati i passaggi attraverso determinate diramazioni (come ad esempio Cascina Gobba) che, anche se non sono stazioni di partenza, arrivo o di scambio, vengono comunque inserite all'interno del percorso per rendere chiari eventuali scambi da effettuare. La metodo generatepath() non è il principale attore del calcolo del percorso. Esso si occupa principalmente di trovare le stazioni più vicine e di decidere quale mezzo adottare per raggiungere la destinazione in base al criterio del percorso a piedi più breve. Il calcolo vero e proprio viene delegato a due metodi privati: getnearestmetro(location l) e getnearesttram(location l). Essi prendono in input la posizione di partenza o destinazione dell'utente e ritornano un oggetto di tipo Node che rappresenta la fermata del tram o della metropolitana più vicina. In mancanza di informazioni riguardanti il tragitto che è possibile effettuare a piedi per determinare la distanza viene utilizzato il metodo di Location distanceto(location l) ereditato dalle classi Metro e TramStation e descritto in precedenza (3.2.3). Il lavoro di generazione del percorso vero e proprio è lasciato quindi a due metodi privati : 43

44 metropathcalculation(metronode metro_start, MetroNode metro_end) e trampathcalculation(tramnode tram_start, TramNode tram_end) i quali ritornano un oggetto del tipo Path. Esso è semplicemente un contenitore per il percorso generato da PathCreator e viene usato solo internamente alla classe stessa. La classe Path contiene al suo interno tre attributi di tipo public: ArrayList<Station> path: una lista contenente le stazioni del percorso. E' ciò che, a fine computazione, viene ritornato al chiamante di generatepath(); int cost: il costo del percorso in numero di stazioni; int original_line: questo valore indica, nel caso di percorso ancora incompleto, la linea da cui viene raggiunta la prima stazione del percorso. Se il percorso è completo allora questo valore è 0. I metodi metropathcalculation() e trampathcalculation() generano il percorso in maniera ricorsiva richiamandosi continuamente fino al raggiungimento della destinazione. A ogni chiamata il metodo controlla se la stazione di destinazione sta sulla stessa linea di quella di partenza. Questo è il caso base e il percorso generato comprende, banalmente, la stazione di partenza ed arrivo. Quando ciò non avviene vengono raccolte tutte le stazioni di snodo (stazioni in cui sono presenti più di una linea di metro, come Centrale FS o Duomo) e, per ognuna di esse viene richiamato il metodo di calcolo del percorso, impostando come punto di arrivo sempre la destinazione e come punto di partenza la stazione di snodo che si sta considerando. A questo punto il metodo si ripete fino a che non viene trovata una stazione di snodo che ha la stessa linea della stazione di arrivo. Visto che il metodo viene chiamato più volte (una volta per ogni stazione di snodo nel caso in cui il percorso non sia banale) i percorsi generati saranno più d'uno. In base al costo (il criterio adottato è il più semplice, ovvero il numero di stazioni percorse) viene selezionato il percorso più breve e ritornato. Per quanto riguarda i percorsi misti vengono di fatto calcolati due percorsi differenti chiamando quindi una volta la metropathcalculation() e una volta trampathcalculation(). Le due funzioni vengono chiamate per creare due percorsi, uno di metro e uno di tram, per 44

45 raggiungere prima, dalla stazione di partenza, un punto di raccordo e poi, dal punto di raccordo, la destinazione. Il punto di raccordo tra le due tipologie di mezzi differenti viene calcolato attraverso la ricerca di due nodi vicini dai quali è possibile passare facilmente da un mezzo all'altro. Ovviamente viene considerato che la distanza in più che il passaggio da un mezzo all'altro può comportare può rendere sconveniente l'utilizzo di un percorso misto, per questa ragione viene considerato un percorso misto solo se ci sono due nodi di passaggio tra tram e metro sufficientemente vicini. Nel calcolo del punto di raccordo viene usato il metodo privato findnearest(collection<metronode>, Collection<TramNode>) che prende in input due liste di nodi, rispettivamente di tram e metro e ritorna la coppia di nodi più vicini nelle due liste. Le liste passate alla funzione sono rispettivamente la lista composta da tutte le stazioni della metro e delle stazioni del tram presenti sulle linee della stazione dalla quale il tram parte o arriva (a seconda che il percorso misto preveda la partenza o l'arrivo col tram) L'individuazione dei malfunzionamenti Le reti pubbliche possono essere soggette a malfunzionamenti di varia natura. L'applicazione si assume il compito di individuare eventuali problemi sulle linee. Essi sono recuperati dalla base di dati remota come e sono organizzati nel modo descritto nel capitolo Nel caso in cui il percorso migliore non si disponibile il software si fa carico di elaborare un percorso alternativo. L'individuazione di guasti o scioperi è delegata al metodo private hasproblem(path path). La funzione viene chiamato ogni volta che è generato un percorso dai metodi di generazione precedentemente presentati. Il percorso elaborato ricevuto in ingresso è quindi suddiviso in tratti in relazione al mezzo e alla linea utilizzati. Su ognuno di essi è invocato il metodo del livello sottostante di comunicazione con il database getproblem(). Esso riceve in ingresso la prima e l'ultima fermata del tratto che si intende percorrere su una determinata linea e l'ora attuale. La query effettuata al database tiene conto di questi elementi per valutare la presenza o meno di inconvenienti. In particolare si verifica che non ci siano problemi su tutte le stazioni del percorso nell'orario indicato. Nel caso si riscontrino malfunzionamenti o scioperi viene ritornato un oggetto del tipo Problem. Esso conterrà il 45

46 tratto bloccato e una descrizione del problema. Se, al contrario, tutto è funzionante getproblem() ritorna null. L'informazione sul problema così ottenuta viene poi usata per scegliere il percorso alternativo fra quelli disponibili. Al verificarsi di un inconveniente molto grave, e su più linee, che impedisce il raggiungimento della destinazione viene generata una ProblemOnEveryPathException. In questo caso l'utente viene informato dell'impossibilità di utilizzare i mezzi attraverso una finestra di pop-up. 46

47 3.4 Interfaccia grafica ed Esempio di utilizzo L'inserimento dei dati La prima parte schermata dell'interfaccia grafica, implementata dall'activity LocationsInsertion, è necessaria all'inserimento dei dati utili per il calcolo del percorso: ovvero la località di partenza e di destinazione. L'interfaccia è riportata nella figura seguente. 11: La schermata di Input Per l'inserimento della partenza sono a disposizione dell'utente due modalità di input: la specifica delle via dalla quale intende partire oppure l'utilizzo del dispositivo GSP. Con la prima possibilità l'utente deve inserire il nome della via e della città dalla quale intende partire. L'SDK di Android mette a disposizione nel package android.location la classe GeoCoder [27] che possiede metodi utili per la gestione degli indirizzi. In questo conteso con il verbo GeoCoding si intende il processo di ottenere le coordinare geografiche latitudine e longitudine a partire da un identificativo di una località. Mentre Reverse Goecoding è il procedimento opposto il quale parte dalle coordinate per ottenere un indirizzo. In questa Activity sono utilizzati entrambi. Ecco come: l'indirizzo fornito in input 47

48 dall'utente è convertito attraverso il metodo getfromlocationname(string,int). Esso, dati in input il nome della strada e il numero massimo di risultati che si intende ottenere, fornisce un ArrayList di Address. Questa classe identifica un indirizzo e contiene, oltre alle coordinate geografiche, il nome della via, città, provincia e nazione. Il metodo descritto può lavorare anche se riceve in ingresso una parte di un indirizzo; ovviamente non potrà ritornare un'unica località ma fornirà l'insieme che più si avvicina alla descrizione fornita. In questi casi, quando vi è un'incertezza sull'effettiva località, è mostrata all'utente una lista delle possibili scelte. Starà quindi a lui il compito di selezionare la desiderata. Se l'indirizzo dal quale si intende partire non è presente nemmeno nell'elenco sarà necessario aumentare la precisione della descrizione fornita. Un esempio dell'elenco fornito all'utente è riportato nella figura seguente: 12: La scelta fra diverse opzioni Per rendere più semplice e veloce l'input da parte dell'utente vengono mantenute in memoria e presentate in fase di inserimento le località richieste in precedenza. Questo è stato fatto utilizzando il database SQLite messo a disposizione dall'sdk di Android 9. Se invece ci si trova già nel luogo dal quale si vuole partire è possibile utilizzare il GPS 9 Esso è descritto nel capitolo: Altri elementi utilizzati nel progetto 48

49 (2.2.4). Il rilevatore calcolerà la posizione geografica fornendo le coordinate latitudine e longitudine. Con il processo di Reverse GeoCoding messo a disposizione dal metodo getfromlocation(double,double,int) è possibile ottenere un'istanza della classe Address che rappresenta il luogo nel quale ci si trova. Per notificare all'utente il successo dell'operazione è mostrato in output una finestra di pop-up con l'indirizzo ottenuto. 13: L'utilizzo del dispositivo GPS Una volta terminata con successo la fase di inserimento dell'indirizzo della partenza è ora necessario specificare la destinazione. Questo è possibile nella parte inferiore della schermata; dove è necessario inserire l'indirizzo. Nel caso di incertezza il comportamento è identico a quello del primo inserimento. Solo una volta completata la fase di input è possibile proseguire con l'utilizzo dell'applicazione. 49

ANDROID. Domenico Talia. Università della Calabria. talia@dimes.unical.it

ANDROID. Domenico Talia. Università della Calabria. talia@dimes.unical.it ANDROID Domenico Talia Università della Calabria talia@dimes.unical.it Sistemi Operativi per Mobile! I sistemi operativi per sistemi mobili seguono i principi dei SO classici ma devono gestire risorse

Dettagli

Programmazione in ambiente

Programmazione in ambiente Università Politecnica delle Marche Dipartimento di Ingegneria dell Informazione Programmazione in ambiente Android Laura Montanini - laura.montanini@univpm.it Corso di Tecnologie per le TLC 2013-2014

Dettagli

Sistemi Mobili e Wireless Android Introduzione alla piattaforma

Sistemi Mobili e Wireless Android Introduzione alla piattaforma Sistemi Mobili e Wireless Android Introduzione alla piattaforma Stefano Burigat Dipartimento di Matematica e Informatica Università di Udine www.dimi.uniud.it/burigat stefano.burigat@uniud.it Cos'è Android?

Dettagli

Android development. Sviluppo di Mobile Apps sul sistema operativo di Google

Android development. Sviluppo di Mobile Apps sul sistema operativo di Google Android development Sviluppo di Mobile Apps sul sistema operativo di Google Agenda Giorni: Gio 14/04/2011 Ven 15/04/2011 Gio 21/04/2011 Ven 22/04/2011 Suddivisione: Mattina: teoria Pomeriggio: pratica

Dettagli

Android. Anatomia di una applicazione

Android. Anatomia di una applicazione Android Anatomia di una applicazione Elementi di base Gli elementi di base per costruire una applicazione Android sono cinque: Activity Intent Broadcast Receiver Service Content Provider 2 Activity (1/3)

Dettagli

Sistemi Mobili e Wireless Android Activity

Sistemi Mobili e Wireless Android Activity Sistemi Mobili e Wireless Android Activity Stefano Burigat Dipartimento di Matematica e Informatica Università di Udine www.dimi.uniud.it/burigat stefano.burigat@uniud.it Activity Tipicamente, un'activity

Dettagli

14/10/2015 ALESSANDRAZULLO SVILUPPO DI APPLICAZIONI ANDROID- VERSIONE 1. http://alessandrazullo.altervista.org Alessandra Zullo

14/10/2015 ALESSANDRAZULLO SVILUPPO DI APPLICAZIONI ANDROID- VERSIONE 1. http://alessandrazullo.altervista.org Alessandra Zullo 14/10/2015 ALESSANDRAZULLO SVILUPPO DI APPLICAZIONI ANDROID- VERSIONE 1 http://alessandrazullo.altervista.org Alessandra Zullo Indice Provvisorio INTRODUZIONE... 3 COMPONENTI PRINCIPALI... 3 PROCESSI...

Dettagli

Sistemi Mobili e Wireless Android Primi passi

Sistemi Mobili e Wireless Android Primi passi Sistemi Mobili e Wireless Android Primi passi Stefano Burigat Dipartimento di Matematica e Informatica Università di Udine www.dimi.uniud.it/burigat stefano.burigat@uniud.it Ambiente di sviluppo L'ambiente

Dettagli

Tecniche di progettazione e sviluppo di applicazioni mobile

Tecniche di progettazione e sviluppo di applicazioni mobile Slide del corso FSE Tecniche di progettazione e sviluppo di applicazioni mobile svolto presso AREA Science Park Padriciano - Trieste - Italy diegozabot@yahoo.it Android Introduzione diegozabot@yahoo.it

Dettagli

INTRODUZIONE ALLE PIATTAFORME

INTRODUZIONE ALLE PIATTAFORME INTRODUZIONE ALLE PIATTAFORME Android ios Windows Phone 8 Android 2 Cos è Android? Un moderno open-source sistema operativo Componenti: Linux kernel Java Core applications 3 Perché è stato un successo

Dettagli

Programmazione Android

Programmazione Android Programmazione Android Giovanni Perbellini, Stefano Cordibella Università di Verona EDALab S.r.l. Agenda Introduzione Android Overview Ambiente di sviluppo Esempi Helloworld Weather 2 1 Cos è Android?

Dettagli

Scaletta. Strumenti di sviluppo Prima applicazione Aspetti peculiari di Android. Conclusioni. Activity e Intent. MoBe s.r.l.

Scaletta. Strumenti di sviluppo Prima applicazione Aspetti peculiari di Android. Conclusioni. Activity e Intent. MoBe s.r.l. Scaletta Strumenti di sviluppo Prima applicazione Aspetti peculiari di Android Activity e Intent Conclusioni Strumenti di sviluppo Disponibili per Windows, Mac OS X (Intel) e Linux Strumenti JDK (Java

Dettagli

Android. Android. Sviluppo di applicazioni. Dalvik 19/03/2011. A. Ferrari

Android. Android. Sviluppo di applicazioni. Dalvik 19/03/2011. A. Ferrari Android Android A. Ferrari Android è un sistema opera8vo per disposi8vi mobili. Inizialmente sviluppato da Startup Android Inc. acquisita poi nel 2005 da Google Inc. Il cuore di Android è un kernel Linux.

Dettagli

Basi Android. Android si definisce open. Con8ene tecnologie open source. Il codice di Android è open. Licenza Open Source Apache 2.

Basi Android. Android si definisce open. Con8ene tecnologie open source. Il codice di Android è open. Licenza Open Source Apache 2. Basi Android 1 Android Cosa è Android? Android è un insieme di strumen8 e librerie per sviluppare applicazioni mobili è più di un SO Android si definisce open Con8ene tecnologie open source Linux Il codice

Dettagli

Scuola Professionale e Filologica Geom. F.Borgogna Vercelli

Scuola Professionale e Filologica Geom. F.Borgogna Vercelli Scuola Professionale e Filologica Geom. F.Borgogna Vercelli Corsi ANDROID 2013/2014 Benvenuti nel mondo dinamico dello sviluppo di applicazioni per smartphone e tablet Android Corsi ANDROID 2013/2014 L

Dettagli

Prof. Pagani Corrado INGEGNERIA DEL SOFTWARE

Prof. Pagani Corrado INGEGNERIA DEL SOFTWARE Prof. Pagani Corrado INGEGNERIA DEL SOFTWARE INTRODUZIONE L ingegneria del software è la disciplina tecnologica e gestionalerelativa alla realizzazione sistematica e alla manutenzione di un software rispettando

Dettagli

MagiCum S.r.l. Progetto Inno-School

MagiCum S.r.l. Progetto Inno-School MagiCum S.r.l. Progetto Inno-School Area Sviluppo Software Autore: Sergio Gandola Revisione: 2 Data: 07/06/13 Titolo: Documentazione Tecnica Diario File:Documentazione Tecnica.pdf Sito: http://inno-school.netsons.org/

Dettagli

Corso App modulo Android. Antonio Gallo info@laboratoriolibero.com

Corso App modulo Android. Antonio Gallo info@laboratoriolibero.com Corso App modulo Android Antonio Gallo info@laboratoriolibero.com Strumentazione: PC + smartphone Android + cavo micro USB per connessione Framework Phonegap SDK di Android JDK (Java) Eclipse (opzionale)

Dettagli

STUDIO E SVILUPPO DI UN APPLICAZIONE DI SICUREZZA PERSONALE IN AMBIENTE ANDROID

STUDIO E SVILUPPO DI UN APPLICAZIONE DI SICUREZZA PERSONALE IN AMBIENTE ANDROID POLITECNICO DI MILANO FACOLTA DI INGEGNERIA CORSO DI LAUREA IN INGEGNERIA INFORMATICA STUDIO E SVILUPPO DI UN APPLICAZIONE DI SICUREZZA PERSONALE IN AMBIENTE ANDROID Relatore: Prof. Capone ANTONIO Correlatore:

Dettagli

Sviluppo su Android. Linux Day Torino 2010

Sviluppo su Android. Linux Day Torino 2010 Sviluppo su Android Linux Day Torino 2010 Francesco Ronchi francesco.ronchi@gmail.com - www.synesthesia.it Cos'è Android Sistema operativo dedicato ai device mobili: cellulari, palmari, tablet, navigatori...

Dettagli

Android. Memorizzazione di dati

Android. Memorizzazione di dati Android Memorizzazione di dati Introduzione In questa lezione vedremo quali sono i metodi principali messi a disposizione da una applicazione Android per memorizzare dei dati in maniera permanente e successivamente

Dettagli

Sviluppo di un applicazione mobile per la gestione degli interventi tecnici tramite geolocalizzazione

Sviluppo di un applicazione mobile per la gestione degli interventi tecnici tramite geolocalizzazione UNIVERSITA DEGLI STUDI DI FERRARA Corso di Laurea in informatica Anno Accademico 2011-2012 Sviluppo di un applicazione mobile per la gestione degli interventi tecnici tramite geolocalizzazione Relatore:

Dettagli

Sviluppo di applicazioni mobili su piattaforma Maemo

Sviluppo di applicazioni mobili su piattaforma Maemo tesi di laurea Anno Accademico 2009/2010 relatore Ch.mo prof. Marcello Cinque candidato Giovanni Fortini Matr. 534/2169 Contesto e contributo Sistemi operativi per dispositivi mobili Sviluppo di un applicazione

Dettagli

Android. Elenco dei package

Android. Elenco dei package Android Elenco dei package Introduzione In questa lezione vedremo l'elenco completo dei package Android che raggruppano le classi che è possibile utilizzare per sviluppare una applicazione utilizzando

Dettagli

Indice: Introduzione 1 Strumenti di lavoro 2 Istallare Eclipse e SDK 3 Istallare l ADT in eclipse 4. Powered by: Vincenzo Acinapura

Indice: Introduzione 1 Strumenti di lavoro 2 Istallare Eclipse e SDK 3 Istallare l ADT in eclipse 4. Powered by: Vincenzo Acinapura Indice: Introduzione 1 Strumenti di lavoro 2 Istallare Eclipse e SDK 3 Istallare l ADT in eclipse 4 Introduzione Salve a tuttiù Mi presento mi chiamo Vincenzo Acinapura e studio ingegneria informatica,

Dettagli

Un Sistema Location-based per la mappatura degli Access Point

Un Sistema Location-based per la mappatura degli Access Point 1 Un Sistema Location-based per la mappatura degli Access Point Pasquale Cautela pasquale.cautela@studio.unibo.it Marco Peca marco.peca@studio.unibo.it Rosario Salpietro rosario.salpietro@studio.unibo.it

Dettagli

ANDROID 4.2 JELLY BEAN Installazione e configurazione dell ambiente

ANDROID 4.2 JELLY BEAN Installazione e configurazione dell ambiente INTRODUZIONE Per sviluppare applicazioni in grado di girare su sistemi Android servono tre cose: il Java JDK (Java Development Kit), che contiene tutti gli strumenti necessari a sviluppare nel linguaggio

Dettagli

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

Android world. Sviluppare app per Android. Un insieme di software per dispositivi mobili (smartphone, tablet, portatili...) Android world Un insieme di software per dispositivi mobili (smartphone, tablet, portatili...) Contiene un Sistema Operativo, software middleware e applicazioni varie Sviluppato da Open Handset Alliance,

Dettagli

Manuale istruzioni. Software Vimar By-web per dispositivi mobili Android Manuale per l'uso

Manuale istruzioni. Software Vimar By-web per dispositivi mobili Android Manuale per l'uso Manuale istruzioni Software Vimar By-web per dispositivi mobili Android Manuale per l'uso Contratto di licenza Vimar con l'utente finale VIMAR SPA con sede in Marostica (VI), Viale Vicenza n. 14 (http://www.vimar.com),

Dettagli

Laboratorio di Elaborazione e Trasmissione Video

Laboratorio di Elaborazione e Trasmissione Video + Laboratorio di Elaborazione e Trasmissione Video Prof. Christian Micheloni Dott. Marco Vernier Dipartimento di Matematica e Informatica Università degli studi di Udine Outline Lezione 1 - Il sistema

Dettagli

Programmazione Android. Luca Morettoni http://www.morettoni.net

Programmazione Android. Luca Morettoni <luca@morettoni.net> http://www.morettoni.net Programmazione Android Luca Morettoni http://www.morettoni.net Android Programming Cos'è Android; Concetti di base sulla programmazione: Q&A AndroidManifest; Activities; Services;

Dettagli

Sviluppo di applicazioni web con il pattern Model-View-Controller. Gabriele Pellegrinetti

Sviluppo di applicazioni web con il pattern Model-View-Controller. Gabriele Pellegrinetti Sviluppo di applicazioni web con il pattern Model-View-Controller Gabriele Pellegrinetti 2 MVC: come funziona e quali sono vantaggi che derivano dal suo utilizzo? La grande diffusione della tecnologia

Dettagli

Programmazione Fondi Strutturali 2007/2013 P.O.N. FSE A.S. 2013/2014 SCHEDA PROGETTUALE MODULO. Obiettivo: C Azione: 1 Riferimento interno:

Programmazione Fondi Strutturali 2007/2013 P.O.N. FSE A.S. 2013/2014 SCHEDA PROGETTUALE MODULO. Obiettivo: C Azione: 1 Riferimento interno: ISTITUTO ISTRUZIONE SECONDARIA SUPERIORE GUGLIELMO MARCONI Piazza Poerio 2, 70126 Bari - Tel.080-5534450 Fax.080-5559037 - www.marconibari.it - info@marconibari.it Programmazione Fondi Strutturali 2007/2013

Dettagli

Sistemi Mobili e Wireless Android Localizzazione utente

Sistemi Mobili e Wireless Android Localizzazione utente 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

Dettagli

L ambiente di sviluppo Android Studio

L ambiente di sviluppo Android Studio L ambiente di sviluppo Android Studio Android Studio è un ambiente di sviluppo integrato (IDE, Integrated Development Environment) per la programmazione di app con Android. È un alternativa all utilizzo

Dettagli

Programmazione. Android

Programmazione. Android Lezioni 4 e 5 Programmazione Android Componenti di un'applicazione AndroidManifest.xml Le Activity Definizione Ciclo di vita Layout & View Interazione Laboratorio 9 e 12 Ottobre 2012 2 Componenti di un'applicazione

Dettagli

Sme.UP Web Application

Sme.UP Web Application Sme.UP Web Application Web Application Web.UP Una interfaccia web per i vostri dati gestionali Il modulo applicativo Web.UP fornisce al progettista di siti Internet una serie di potenti strumenti per l'integrazione

Dettagli

1.2.1.1 DEFINIZIONE DI SOFTWARE

1.2.1.1 DEFINIZIONE DI SOFTWARE Software 1.2 1.2.1.1 DEFINIZIONE DI SOFTWARE Il computer non è in grado di svolgere alcun compito autonomamente Esso può eseguire svariati compiti soltanto se viene opportunamente istruito Ciò avviene

Dettagli

Corso di Web programming Modulo T3 A2 - Web server

Corso di Web programming Modulo T3 A2 - Web server Corso di Web programming Modulo T3 A2 - Web server 1 Prerequisiti Pagine statiche e dinamiche Pagine HTML Server e client Cenni ai database e all SQL 2 1 Introduzione In questa Unità si illustra il concetto

Dettagli

Progetto e sviluppo di un applicazione client-server per la raccolta dati su fallimenti in ambiente Android

Progetto e sviluppo di un applicazione client-server per la raccolta dati su fallimenti in ambiente Android Facoltà di Ingegneria Corso di Studi in Ingegneria Informatica Elaborato finale in Sistemi operativi Progetto e sviluppo di un applicazione client-server per la raccolta dati su fallimenti in Anno Accademico

Dettagli

Progettazione di Sistemi Interattivi. Gli strati e la rete. Struttura e supporti all implementazione di applicazioni in rete (cenni)

Progettazione di Sistemi Interattivi. Gli strati e la rete. Struttura e supporti all implementazione di applicazioni in rete (cenni) Progettazione di Sistemi Interattivi Struttura e supporti all implementazione di applicazioni in rete (cenni) Docente: Daniela Fogli Gli strati e la rete Stratificazione da un altro punto di vista: i calcolatori

Dettagli

Breve introduzione allo sviluppo WEB. a cura di Ciro Attanasio - ciro.attanasio@email.cz

Breve introduzione allo sviluppo WEB. a cura di Ciro Attanasio - ciro.attanasio@email.cz Breve introduzione allo sviluppo WEB a cura di Ciro Attanasio - ciro.attanasio@email.cz Partiamo (1 di 1) Come funziona il WEB e quali tecnologie lo compongono Cos è un Client (1 di 2) Un client, in informatica,

Dettagli

INTERFACCIA UTENTE----------------------------------------------------------------------------------------------------

INTERFACCIA UTENTE---------------------------------------------------------------------------------------------------- IL FILE SYSTEM PROF. ANTONIO TUFANO Indice 1 FILE SYSTEM ------------------------------------------------------------------------------------------------------------------ 3 1.1. CARATTERISTICHE E STORIA

Dettagli

MA GLI ANDROIDI SOGNANO PINGUINI ELETTRICI? Introduzione ad Android. Il futuro prossimo dei telefoni cellulari.

MA GLI ANDROIDI SOGNANO PINGUINI ELETTRICI? Introduzione ad Android. Il futuro prossimo dei telefoni cellulari. MA GLI ANDROIDI SOGNANO PINGUINI ELETTRICI? Introduzione ad Android. Il futuro prossimo dei telefoni cellulari. 8 aprile 2008 Case delle Culture di Ponziana via Orlandini 38 - Trieste Cos'è Android? Android

Dettagli

Ambiente Virtuale Inclusivo per la Persona Autistica MANUALE OPERATORE. Release 1.0-13/10/09. Copyright Lynx 2009 http://www.lynxlab.

Ambiente Virtuale Inclusivo per la Persona Autistica MANUALE OPERATORE. Release 1.0-13/10/09. Copyright Lynx 2009 http://www.lynxlab. MANUALE OPERATORE Release 1.0-13/10/09 Copyright Lynx 2009 http://www.lynxlab.com Indice generale MANUALE OPERATORE...1 1.1 Definizioni...3 1.2 Ambienti...3 1.3 Release e copyright...3 2. Utenti...4 2.1

Dettagli

Architetture Software

Architetture Software Università degli Studi di Parma Facoltà di Scienze MM. FF. NN. Corso di Laurea in Informatica Ingegneria del Software Architetture Software Giulio Destri Ing. del Sw: Architettura - 1 Scopo del modulo

Dettagli

PROGETTO - Ingegneria del Software. Università degli Studi di Milano Polo di Crema. Corso di laurea in Scienze Matematiche, Fisiche e Naturali

PROGETTO - Ingegneria del Software. Università degli Studi di Milano Polo di Crema. Corso di laurea in Scienze Matematiche, Fisiche e Naturali Università degli Studi di Milano Polo di Crema Corso di laurea in Scienze Matematiche, Fisiche e Naturali INFORMATICA Corso di Ingegneria del Software progetto IL SISTEMA CALENDAR Presentato al dott. Paolo

Dettagli

La realizzazione di WebGis con strumenti "Open Source".

La realizzazione di WebGis con strumenti Open Source. La realizzazione di WebGis con strumenti "Open Source". Esempi di impiego di strumenti a sorgente aperto per la realizzazione di un Gis con interfaccia Web Cos'è un Web Gis? Da wikipedia: Sono detti WebGIS

Dettagli

Corso di Alfabetizzazione Informatica

Corso di Alfabetizzazione Informatica Corso di Alfabetizzazione Informatica Lezione 6 a.a. 2010/2011 Francesco Fontanella La Complessità del Hardware Il modello di Von Neumann è uno schema di principio. Attualmente in commercio esistono: diversi

Dettagli

Struttura di un sistema operativo. Struttura dei Sistemi Operativi. Servizi per l utente generico. Servizi per l utente generico

Struttura di un sistema operativo. Struttura dei Sistemi Operativi. Servizi per l utente generico. Servizi per l utente generico Impossibile visualizzare l'immagine. Struttura di un sistema operativo Struttura dei Sistemi Operativi Servizi di un sistema operativo Interfaccia Utente Capitolo 2 -- Silberschatz Chiamate di sistema

Dettagli

PROGETTI DISPONIBILI IL CORSO DI PROGETTO DI RETI E SISTEMI INFORMATICI

PROGETTI DISPONIBILI IL CORSO DI PROGETTO DI RETI E SISTEMI INFORMATICI PROGETTI DISPONIBILI IL CORSO DI PROGETTO DI RETI E SISTEMI INFORMATICI 1 Web Link Monitor... 2 2 Database Browser... 4 3 Network Monitor... 5 4 Ghost Site... 7 5 Copy Search... 9 6 Remote Audio Video

Dettagli

Android. Ciclo di vita di Activity, Service e Processi

Android. Ciclo di vita di Activity, Service e Processi Android Ciclo di vita di Activity, Service e Processi Introduzione In questa lezione analizzeremo il ciclo di vita delle Activity e dei Service mettendo in evidenza i criteri utilizzati da Android nella

Dettagli

WEB TECHNOLOGY. Il web connette. LE persone. E-book n 2 - Copyright Reserved

WEB TECHNOLOGY. Il web connette. LE persone. E-book n 2 - Copyright Reserved WEB TECHNOLOGY Il web connette LE persone Indice «Il Web non si limita a collegare macchine, ma connette delle persone» Il Www, Client e Web Server pagina 3-4 - 5 CMS e template pagina 6-7-8 Tim Berners-Lee

Dettagli

Laboratorio di Smart Vision and Sensor Networks. Niki Martinel Marco Vernier Dipartimento di Matematica e Informatica Università degli studi di Udine

Laboratorio di Smart Vision and Sensor Networks. Niki Martinel Marco Vernier Dipartimento di Matematica e Informatica Università degli studi di Udine + Laboratorio di Smart Vision and Sensor Networks Niki Martinel Marco Vernier Dipartimento di Matematica e Informatica Università degli studi di Udine Outline Lezione 1 - Il sistema operativo Android Cos

Dettagli

uomo Software (sistema operativo) hardware

uomo Software (sistema operativo) hardware uomo Software (sistema operativo) hardware 1 Sistema operativo Insieme di programmi che svolgono funzioni essenziali per l uso del sistema di elaborazione Questi programmi sono i primi ad essere eseguiti

Dettagli

Software per la gestione di musei di arte contemporanea1

Software per la gestione di musei di arte contemporanea1 Software per la gestione di musei di arte contemporanea1 Identificativo del progetto: CA Nome documento: System Design(SD) Identificativo del documento: 6 CA_SD_E1_R1 Data del documento: 21/05/2012 Prima

Dettagli

Installazione e guida introduttiva. Per WebReporter 2012

Installazione e guida introduttiva. Per WebReporter 2012 Per WebReporter 2012 Ultimo aggiornamento: 13 settembre, 2012 Indice Installazione dei componenti essenziali... 1 Panoramica... 1 Passo 1 : Abilitare gli Internet Information Services... 1 Passo 2: Eseguire

Dettagli

La Login in Prestito!!Disponbilità Tesi. Categorie di Progetti di Ingegneria del Software

La Login in Prestito!!Disponbilità Tesi. Categorie di Progetti di Ingegneria del Software Draft versione 1.1 Categorie di Progetti di Ingegneria del Software Tutti i temi Progettuali proposti rientrano in una delle seguenti categorie. 1. Temi sull'elaborazione di Dati Multimediali Temi su Audio,

Dettagli

MONITOR DEGLI EVENTI PER SISTEMI MOBILI

MONITOR DEGLI EVENTI PER SISTEMI MOBILI UNIVERSITÀ DEGLI STUDI DI ROMA TOR VERGATA Facoltà di Ingegneria Corso di Laurea Specialistica in Ingegneria Informatica Progetto per il corso di Sicurezza dei Sistemi Informatici MONITOR DEGLI EVENTI

Dettagli

Guida introduttiva di F-Secure PSB

Guida introduttiva di F-Secure PSB Guida introduttiva di F-Secure PSB Guida introduttiva di F-Secure PSB Indice generale 3 Sommario Capitolo 1: Introduzione...5 Capitolo 2: Guida introduttiva...7 Creazione di un nuovo account...8 Come

Dettagli

FileMaker 12. Guida ODBC e JDBC

FileMaker 12. Guida ODBC e JDBC FileMaker 12 Guida ODBC e JDBC 2004 2012 FileMaker, Inc. Tutti i diritti riservati. FileMaker, Inc. 5201 Patrick Henry Drive Santa Clara, California 95054 FileMaker e Bento sono marchi di FileMaker, Inc.

Dettagli

Realizzazione di un sistema di logging prototipale per la piattaforma

Realizzazione di un sistema di logging prototipale per la piattaforma tesi di laurea Realizzazione di un sistema di logging prototipale per la piattaforma Android Anno Accademico 2011 / 2012 relatore Ch.mo prof. Marcello Cinque candidato Dario De Meis Matr. 528 / 741 Smartphone

Dettagli

Programmabilità di rete con l'infrastruttura Cisco basata sulle applicazioni

Programmabilità di rete con l'infrastruttura Cisco basata sulle applicazioni White paper Programmabilità di rete con l'infrastruttura Cisco basata sulle applicazioni Panoramica Questo documento analizza il supporto alla programmabilità nell'infrastruttura ACI (Application Centric

Dettagli

LUCA VACCARO. Politecnico di Milano. S2MS Guida di Riferimento

LUCA VACCARO. Politecnico di Milano. S2MS Guida di Riferimento LUCA VACCARO Politecnico di Milano S2MS Guida di Riferimento L U C A V A C C A R O S2MS Guida di Riferimento Software sviluppato da Luca Vaccaro luck87@gmail.com Progetto del corso Internetworking TCP/IP

Dettagli

Laboratorio di Informatica

Laboratorio di Informatica Laboratorio di Informatica SOFTWARE Francesco Tura francesco.tura@unibo.it 1 Le componenti del calcolatore: HARDWARE E SOFTWARE HARDWARE parti che compongono fisicamente il calcolatore componente multifunzionale

Dettagli

MagiCum S.r.l. Progetto Inno-School

MagiCum S.r.l. Progetto Inno-School MagiCum S.r.l. Progetto Inno-School Area applicazioni Autore: Alessio Salandi Revisione: 1.0 Data: 23/05/2013 Titolo: Documentazione tecnica - Grafica Diario File:Documentazione.pdf Sito: http://inno-school.netsons.org/

Dettagli

Corso Android Corso Online Programmatore Android

Corso Android Corso Online Programmatore Android Corso Android Corso Online Programmatore Android Accademia Domani Via Pietro Blaserna, 101-00146 ROMA (RM) info@accademiadomani.it Programma Generale del Corso Modulo Uno - Programmazione J2ee 1) Programmazione

Dettagli

Corso Android New Edition Corso Online Programmatore Android New Edition

Corso Android New Edition Corso Online Programmatore Android New Edition Corso Android New Edition Corso Online Programmatore Android New Edition Accademia Domani Via Pietro Blaserna, 101-00146 ROMA (RM) info@accademiadomani.it Programma Generale del Corso di Programmatore

Dettagli

Aspetti applicativi e tecnologia

Aspetti applicativi e tecnologia Aspetti applicativi e tecnologia Premessa Architetture usate per i database Le prime applicazioni erano definite monolitiche, cioè un unico computer (mainframe) gestiva sia le applicazioni che i dati,

Dettagli

Corso di Sistemi di Elaborazione delle informazioni

Corso di Sistemi di Elaborazione delle informazioni Corso di Sistemi di Elaborazione delle informazioni Sistemi Operativi Francesco Fontanella La Complessità del Hardware Il modello di Von Neumann è uno schema di principio. Attualmente in commercio esistono:

Dettagli

Capitolo 2 -- Silberschatz

Capitolo 2 -- Silberschatz Struttura dei Sistemi Operativi Capitolo 2 -- Silberschatz Struttura di un sistema operativo Servizi di un sistema operativo Interfaccia Utente Chiamate di sistema Tipi di chiamate Programma di sistema

Dettagli

Android AppInventor. Argomenti trattati. Introduzione. AppInventor. etc. Google Android Android SDK, Android Market

Android AppInventor. Argomenti trattati. Introduzione. AppInventor. etc. Google Android Android SDK, Android Market Android v. 1.0.1 Argomenti trattati Android AppInventor Introduzione Google Android Android SDK, Android Market AppInventor Architettura Sviluppo di applicazioni etc Storia Introduzione Android Android

Dettagli

Indice generale. Capitolo 1 Introduzione ad Android... 1

Indice generale. Capitolo 1 Introduzione ad Android... 1 Prefazione Introduzione...xvii...xix Capitolo 1 Introduzione ad Android... 1 Che cos è Android... 2 Un po di storia... 3 Android e Java... 4 Confronto con J2ME... 6 La Dalvik Virtual Machine... 9 L architettura

Dettagli

Android. Android03: Ciclo di vita di una Activity. diegozabot@yahoo.it

Android. Android03: Ciclo di vita di una Activity. diegozabot@yahoo.it Android Android03: Ciclo di vita di una Activity diegozabot@yahoo.it Ciclo di vita Ciclo di vita La classe Activity gestisce i propri stati definendo una serie di eventi che ne governano il ciclo. Spetta

Dettagli

Cross Software ltd Malta Pro.Sy.T Srl. Il gestionale come l'avete sempre sognato... Pag. 1

Cross Software ltd Malta Pro.Sy.T Srl. Il gestionale come l'avete sempre sognato... Pag. 1 Il gestionale come l'avete sempre sognato... Pag. 1 Le funzionalità di X-Cross La sofisticata tecnologia di CrossModel, oltre a permettere di lavorare in Internet come nel proprio ufficio e ad avere una

Dettagli

Client XProtect Accesso al sistema di sorveglianza

Client XProtect Accesso al sistema di sorveglianza Client XProtect Accesso al sistema di sorveglianza Tre modalità di visualizzazione della videosorveglianza Per accedere facilmente alla videosorveglianza, Milestone offre tre interfacce utente flessibili:

Dettagli

UNIVERSITA DEGLI STUDI DI L AQUILAL FACOLTA DI INGEGNERIA Applicazioni per dispositivi mobili: gli strumenti di sviluppo di Flash Lite. Diego Vasarelli Indice degli argomenti trattati. Introduzione agli

Dettagli

Applicazione: Piattaforma di Comunicazione Unificata

Applicazione: Piattaforma di Comunicazione Unificata Riusabilità del software - Catalogo delle applicazioni: Amministrativi/Contabile Applicazione: Piattaforma di Comunicazione Unificata Amministrazione: Regione Piemonte - Direzione Innovazione, Ricerca

Dettagli

per favore Android Mobile Programming Prof. R. De Prisco Prof. Roberto De Prisco 29/09/14 e NON RISPONDERE!!!! Slide 3

per favore Android Mobile Programming Prof. R. De Prisco Prof. Roberto De Prisco 29/09/14 e NON RISPONDERE!!!! Slide 3 Prof. Roberto De Prisco 2 per favore 3 o almeno e NON RISPONDERE!!!! Scrivere un app che mehe la vibrazione il lun e gio dalle 16:00 alle 18:00 1 Dress Code 4 Lui Vestito scuro, cravatta, camicia chiara,

Dettagli

Prova Finale a.a. 2011/2012. Laboratorio 1: Introduzione a Java e Eclipse

Prova Finale a.a. 2011/2012. Laboratorio 1: Introduzione a Java e Eclipse Prova Finale a.a. 2011/2012 Laboratorio 1: Introduzione a Java e Eclipse 1 Java 6 Standard Edition Linguaggio Java (... (javac, Tool di sviluppo Librerie per l'interfaccia grafica Librerie di base Macchina

Dettagli

Definizione Parte del software che gestisce I programmi applicativi L interfaccia tra il calcolatore e i programmi applicativi Le funzionalità di base

Definizione Parte del software che gestisce I programmi applicativi L interfaccia tra il calcolatore e i programmi applicativi Le funzionalità di base Sistema operativo Definizione Parte del software che gestisce I programmi applicativi L interfaccia tra il calcolatore e i programmi applicativi Le funzionalità di base Architettura a strati di un calcolatore

Dettagli

Accesso alle applicazioni protetto. Ovunque.

Accesso alle applicazioni protetto. Ovunque. Scheda tecnica Accesso alle applicazioni protetto. Ovunque. Utenti mobili protetti Nelle organizzazioni odierne, ai responsabili IT viene spesso richiesto di fornire a diversi tipi di utente l'accesso

Dettagli

Nuova ECDL ONLINE COLLABORATION

Nuova ECDL ONLINE COLLABORATION PATENTE EUROPEA DEL COMPUTER Nuova ECDL ONLINE COLLABORATION CONCETTI FONDAMENTALI USO DI DISPOSITIVI MOBILI APPLICAZIONI SINCRONIZZAZIONE 4. COLLABORAZIONE MOBILE 4.1. Concetti fondamentali 4.1.1 Identificare

Dettagli

UNIVERSITÀ DEGLI STUDI DI NAPOLI PARTHENOPE FACOLTÀ DI SCIENZE E TECNOLOGIE Corso di Laurea In Informatica

UNIVERSITÀ DEGLI STUDI DI NAPOLI PARTHENOPE FACOLTÀ DI SCIENZE E TECNOLOGIE Corso di Laurea In Informatica UNIVERSITÀ DEGLI STUDI DI NAPOLI PARTHENOPE FACOLTÀ DI SCIENZE E TECNOLOGIE Corso di Laurea In Informatica Sviluppo di un'applicazione Android per i servizi studenti Relatore Chiar.mo Prof. Raffaele MONTELLA

Dettagli

Concetti base. Impianti Informatici. Web application

Concetti base. Impianti Informatici. Web application Concetti base Web application La diffusione del World Wide Web 2 Supporto ai ricercatori Organizzazione documentazione Condivisione informazioni Scambio di informazioni di qualsiasi natura Chat Forum Intranet

Dettagli

Lezione 3 Le attività

Lezione 3 Le attività A cura di Carlo Pelliccia Le applicazioni Android, come si è accennato durante la prima lezione, si compongono di quattro mattoni fondamentali: le attività (activity), i servizi (service), i broadcast

Dettagli

Hydrica 2011, Salone Internazionale Tecnologie Acqua e Ambiente

Hydrica 2011, Salone Internazionale Tecnologie Acqua e Ambiente Applicazioni GIS per il ciclo integrato delle acque: implementazione usando JGrassTools, udig, BeeGIS e EPANET Introduzione Andrea Bosoni, Silvia Franceschi, Davide Righetti andrea.bosoni@gmail.com, silvia.franceschi@hydrologis.eu,

Dettagli

Istituto Tecnico Industriale Statale Dionigi Scano Cagliari. Candidato: Medda Daniele Classe 5ª C Informatica Anno scolastico 2013/2014.

Istituto Tecnico Industriale Statale Dionigi Scano Cagliari. Candidato: Medda Daniele Classe 5ª C Informatica Anno scolastico 2013/2014. Istituto Tecnico Industriale Statale Dionigi Scano Cagliari Candidato: Medda Daniele Classe 5ª C Informatica Anno scolastico 2013/2014 relate Un esperimento di social networking open source 1 Introduzione

Dettagli

Strumenti per lo sviluppo del software

Strumenti per lo sviluppo del software Lo sviluppo del software Strumenti per lo sviluppo del software Lo sviluppo del software è l attività centrale del progetto e ha lo scopo di produrre il codice sorgente che, una volta compilato e messo

Dettagli

CORSO WEB SERVER, DBMS E SERVER FTP

CORSO WEB SERVER, DBMS E SERVER FTP CORSO WEB SERVER, DBMS E SERVER FTP DISPENSA LEZIONE 1 Autore D. Mondello Transazione di dati in una richiesta di sito web Quando viene effettuata la richiesta di un sito Internet su un browser, tramite

Dettagli

ALMA MATER STUDIORUM UNIVERSITÀ DI BOLOGNA

ALMA MATER STUDIORUM UNIVERSITÀ DI BOLOGNA ALMA MATER STUDIORUM UNIVERSITÀ DI BOLOGNA Seconda Facoltà di Ingegneria Corso di Laurea in Ingegneria Informatica SVILUPPO DI APPLICAZIONI MOBILE SU PIATTAFORMA ANDROID: ANALISI DEL MODELLO DI PROGRAMMAZIONE

Dettagli

27/03/2013. Contenuti

27/03/2013. Contenuti Corso Sistemi Distribuiti 6 cfu Docente: Prof. Marcello Castellano Contenuti Virtualizzazione - 3 Macchina virtuale - 4 Architetture delle macchine virtuali - 6 Tipi di virtualizzazione - 7 Monitor della

Dettagli

Introduzione al linguaggio Java: Servlet e JSP

Introduzione al linguaggio Java: Servlet e JSP Introduzione al linguaggio Java: Servlet e JSP Corso di Gestione della Conoscenza d Impresa A. A. 2006/2007 Dipartimento di Informatica Università degli Studi di Bari 1 Servlet e JSP: il contesto Un applicazione

Dettagli

Android Introduzione all architettura, alla programmazione e alla sicurezza. Alessandro Tanasi - http://www.tanasi.it - alessandro@tanasi.

Android Introduzione all architettura, alla programmazione e alla sicurezza. Alessandro Tanasi - http://www.tanasi.it - alessandro@tanasi. Android Introduzione all architettura, alla programmazione e alla sicurezza Alessandro Tanasi - http://www.tanasi.it - alessandro@tanasi.it Fun & profit Fun Sviluppo applicazioni Invenzione di nuove applicazioni

Dettagli

Installazione del Software. per lo Sviluppo di Applicazioni Java

Installazione del Software. per lo Sviluppo di Applicazioni Java Installazione del Software per lo Sviluppo di Applicazioni Java Ing. Luca Ferrari ferrari.luca@unimore.it Tel. 0592056142 Installazione del Software per lo Sviluppo di Applicazioni Java 1 Il Compilatore

Dettagli

Tecnologie e Programmazione Web

Tecnologie e Programmazione Web Presentazione 1 Tecnologie e Programmazione Web Html, JavaScript e PHP RgLUG Ragusa Linux Users Group SOftware LIbero RAgusa http://www.solira.org - Nunzio Brugaletta (ennebi) - Reti 2 Scopi di una rete

Dettagli

Questa scelta è stata suggerita dal fatto che la stragrande maggioranza dei navigatori usa effettivamente IE come browser predefinito.

Questa scelta è stata suggerita dal fatto che la stragrande maggioranza dei navigatori usa effettivamente IE come browser predefinito. Pagina 1 di 17 Installazione e configurazione di applicazioni Installare e configurare un browser Come già spiegato nelle precedenti parti introduttive di questo modulo un browser è una applicazione (lato

Dettagli

Introduzione alle basi di dati. Gestione delle informazioni. Gestione delle informazioni. Sistema informatico

Introduzione alle basi di dati. Gestione delle informazioni. Gestione delle informazioni. Sistema informatico Introduzione alle basi di dati Introduzione alle basi di dati Gestione delle informazioni Base di dati Modello dei dati Indipendenza dei dati Accesso ai dati Vantaggi e svantaggi dei DBMS Gestione delle

Dettagli

Realizzazione di un servizio per la rilevazione di malfunzionamenti in ambiente Android

Realizzazione di un servizio per la rilevazione di malfunzionamenti in ambiente Android Facoltà di Ingegneria Corso di Studi in Ingegneria Informatica tesi di laurea Realizzazione di un servizio per la rilevazione di malfunzionamenti in ambiente Android Anno Accademico 2011/12 relatore Ch.mo

Dettagli