You are on page 1of 11

Android

Nello sviluppo dell applicazione Android per ByNight abbiamo utilizzato le seguenti componenti che descriveremo brevemente. Activity: una classe Java che estende la classe Activity e rappresenta una singola schermata
della nostra applicazione;

Intent: un'azione che possiamo far invocare ad Android;


AndroidManifest.xml: un file XML, che si trova nella directory principale del progetto, responsabile della configurazione e del comportamento della nostra applicazione; Come Android gestisce le Interfacce Grafiche;

Ogni applicazione Android ha oltretutto:

La cartella "src" :che contiene il codice sorgente; La cartella "resource" (res) che contiene le risorse necessarie alla nostra applicazione per un corretto funzionamento: questa cartella pu contenere sottocartelle per l'organizzazione delle risorse, come ad esempio

o o

"drawable" che stata utilizzata per cambiare licona dimmagine della nostra applicazione; layout per definire le View della nostra applicazione: in questa cartella che mettiamo i file XML che definiscono le interfacce della applicazione (invece che definirle da codice).

Activity
La classe Activity uno degli elementi centrali di ogni applicazione Android. L'Activity un concetto legato allo sviluppo delle interfacce grafiche: normalmente unActivity rappresenta una singola schermata della nostra applicazione. Le applicazioni possono definire una o pi Activity per trattare diverse fasi del software: ogni Activity responsabile del salvataggio del proprio stato in modo da poterlo ristabilire successivamente come parte del ciclo di vita dell'applicazione. Ci pu essere solo una Activity attiva per volta, quindi una sola Activity per volta pu essere in "primo piano" (foreground) nello stesso tempo: una Activity che in un determinato momento non si trova nello stato attivo e quindi non si trova in foreground (in questo caso si dice che l'Activity si trova in backgroud) potrebbe essere terminata dal sistema operativo ad esempio perch la memoria diventa insufficiente perch il SO Android si occupa della gestione della memoria. Questo significa che ogni applicazione Android pu cambiare lo stato in ogni momento e deve essere pronta ad essere interrotta e chiusa in ogni istante (normalmente quindi non conviene mai creare un applicazione con troppe Activity)

Quando passi da un'Activity ad un'altra, il SO mette il sleep l'Activity, e la inserisce in una coda LIFO. Quindi quando dall'Activity principale si passa ad un'altra, questa entra in tale coda, e viene visualizzata la nuova. Nel momento in cui l'Activity corrente viene chiusa, viene presentata l'ultima introdotta nella coda, che a questo punto la principale. Ogni Activity ha un ciclo di vita che attraversa prima di arrivare alla fine

Intent
Possiamo immaginare un Intent come un'azione che possiamo far invocare ad Android: un Intent pu essere molto specifico ed essere richiamabile da una specifica Activity oppure pu essere generico e disponibile per qualsiasi Activity che rispetta determinati criteri. Schematizzando, un Intent pu essere utilizzato per: Trasmettere l'informazione per cui un particolare evento (o azione) si verificato; Esplicitare un'intenzione che una Activity pu sfruttare per eseguire un determinato compito o azione, solitamente con o su un particolare insieme di dati; Lanciare una particolare Activity; Supportare l'interazione tra qualsiasi applicazione installata sul dispositivo Android, senza doversi preoccupare di che tipo di applicazione sia o di quale componente software gli Intent facciano parte. L'Intent uno dei concetti e dei meccanismi fondamentali di Android: la sua implementazione trasforma ogni dispositivo Android in una collezione di componenti indipendenti ma facenti parte di un singolo sistema interconnesso.

L'application context
L'application context un elemento centrale e importante per tutte le funzionalit disponibili al pi alto livello applicativo: possiamo utilizzare l'application context per accedere alle risorse e alle impostazioni condivise tra istanze di diverse Activity. Una volta recuperato l'application context possiamo utilizzarlo:

Per accedere ad un ampio insieme di caratteristiche e servizi a disposizione dell'applicazione; Per richiamare e lanciare istanze di Activity: implementare il lancio di una Activity nel file Manifest oppure lanciare un'Activity figlia da una Activity padre per riceverne un risultato;

Interfaccia grafica
Android consente unaltra modalit di costruzione delle interfacce utente (UI), basate su file XML. Possiamo scegliere approcci diversi per la costruzione delle interfacce in ambiente Android: la prima possibilit quella di definire l'interfaccia interamente da codice Java (metodo procedurale), altrimenti possiamo scegliere di costruire le interfacce attraverso un descrittore XML (metodo dichiarativo), oppure ancora possiamo scegliere un approccio "ibrido", definire le interfacce in XML e poi, attraverso un riferimento, modificarle e gestirle da codice. Android mette a disposizione dello sviluppatore alcuni semplici modelli di layout che semplificano notevolmente la creazione delle interfacce. Nellapplicazione Android ByNight si usato principalmente LinearLayout: il LinearLayout allinea ogni View figlia sia in senso verticale sia in senso orizzontale (un layout orizzontale ha una riga di oggetti View,mentre un layout verticale composto da una colonna di oggetti View); Laccesso ai widget della View sono acceduti tramite ID e modificati tramite una sintassi che ricorda molto quella utilizzata nei CSS.

View e ViewGroup
Una View sostanzialmente un'area rettangolare nello schermo responsabile del disegno degli elementi grafici e della cattura e gestione degli eventi generati dall'utente. Un oggetto ViewGroup anch'esso una View,ma che contiene altre View. Nella piattaforma Android si utilizza il concetto di "layout" per gestire l'impaginazione dei controlli all'interno di un contenitore di oggetti View. Utilizzare i layout facilita la progettazione delle interfacce perch pi semplice orientare e posizionare i controlli che le compongono.

Il cuore di un'applicazione Android: AndroidManifest.xml


L'AndroidManifest.xml il file che definisce i contenuti e il comportamento della nostra applicazione: all'interno di questo file sono elencate le Activity (e i Services se si usano) dell'applicazione, con i permessi che necessita per funzionare correttamente. Quando l'applicazione viene installata il gestore dei pacchetti concede o non concede i privilegi a seconda di come li abbiamo configurati nell'AndroidManifest.xml.

La nostra applicazione Android


Per il nostro progetto abbiamo utilizzato lIDE Eclipse. Il nostro emulatore un telefono che si basa sul SO Android 4.0 anche se abbiamo utilizzato le librerie di Androidi 2.3.3 in quanto la nostra applicazione non fa un uso di funzionalit particolari messe a disposizione dalle librerie delle versione successive del SO. Come software di controllo di versione, anche per lapplicazione Android, abbiamo utilizzato Subversion, previa configurazione mostrata nello Spike a lezione. La nostra applicazione Android da la possibilit di effettuare la ricerca di Locali/Eventi effettuando una chiamata al Web Service di ByNight.

Le Classi da cui formato il nostro progetto sono : o Splash : l Activity di benvenuto; o BYNightProjectActivity: l Activity dove si effettua la ricerca del Locale/Evento; o ContextMenu: l Activity dove vengono presentati tutti i risultati che soddisfano la ricerca e lutente sceglie il risultato che preferisce; o Visualizza: l Activity che mostra i dettagli del Locale/Evento cercato; o EventiLocali: una Classe Java di utility utilizzata per parsificare i risultati restituiti dalla chiamata SOAP al Web Services;

Splash
una semplice Activity che, tramite lausilio di un Thread, offre per 3secondi una schermata di benvenuto e poi manda un Intent per il lancio dell Activity BYNightProjectActivity che permetter di effettuare la ricerca.

BYNightProjectActivity
l Activity dove si effettua la ricerca del Locale/Evento. Inserito cosa cercare e la sua categoria (Locale o Evento) alla pressione del tasto Cerca : 1. Si effettua una chiamata SOAP al Web Service; 2. Il risultato della chiamata SOAP viene poi mandato alla Classe EventiLocali che si occupa di parsificarlo e far ritornare i risultati in una Lista di Array di Stringhe
List<String[]>;

3. Il risultato viene poi inserito in un Intent e mandato all Activity ContextMenu che viene attivata; In caso di ricerca senza risultato ne viene mostrato un avviso allutente e data la possibilit di effettuare altre ricerche. In questa Activity sono presenti anche un tasto Reset per la pulizia della casella di testo dove si inserisce la chiave di ricerca e il tasto Esci che, previa richiesta conferma allutente, permette di uscire dallapplicazione.

ContextMenu
l Activity dove vengono presentati tutti i risultati che soddisfano la ricerca. Lutente sceglie il risultato che preferisce premendo uno tra i risultati presenti nel Men creato dinamicamente (Spinner). Alla pressione della scelta viene mandato un Intent con tutte le informazioni riguardanti la scelta dell utente all Activity Visualizza che viene attivata. In questa Activity il tasto Cerca e la casella di testo dove si digita cosa cercare sono disabilitati.

Visualizza
l Activity che mostra i dettagli del Locale/Evento cercato. caratterizzata: o Da un immagine caricata a Run-Time presa direttamente dal WEB tramite l URL che uno dei parametri che il risultato della chiamata SOAP ci aveva restituiti; o Dalle informazioni che riguardano il locale la pagine scorrevole se il risultato non completamente visualizzabile nella View dell Activity.

EventiLocali
una Classe Java di utility utilizzata per parsificare i risultati restituiti dalla chiamata SOAP al Web Services. Questa classe presente perch in fase di sviluppo, prima dellintegrazione con il Web Service , veniva usata come classe che restituiva una Lista di Array di Stringhe di locali o eventi in base alla scelta- fissi per avere dei dati e poter completare lo sviluppo dellapplicazione. Sfruttando poi il principio di Modularit dei linguaggi ad oggetti , quale JAVA, dopo lintegrazione con il Web Services si modificato questa classe in modo da parsificare i risultati della chiamata SOAP e farli ritornare in una Lista di Array di Stringhe senza poi dover modificare nient altro.

Difficolt riscontrate
Tra le difficolt riscontrate e i punti salienti del progetto, relativamente alla parte di Android e tralasciando tutto ci che stato entrare nellottica sviluppo di applicazioni Android , citiamo: o L integrazione dellapplicazione con il Web Service ; o Permettere allapplicazione di utilizzare la rete; o Permettere lesplicita uscita dall applicazione; o Effettuare l Override delle classi (non si implementa trovando la soluzione nell aggiunta di un Activity in pi);

Integrazione con il Web Server


Per poter effettuare chiamate SOAP al Web Service si fatto uso delle librerie kSOAP 2. http://ksoap2.sourceforge.net/.

Permettere alla singola applicazione di utilizzare la rete


Pur se lintegrazione con Web Service era completata e il metodo per caricare limmagine da URL nellActivity Visualizza era corretto i due metodi che si occupavano di ci non funzionavano correttamente. Questo era dovuto a delle politiche di restrizione sulle applicazione (StrictMode) che Android setta di default nelle applicazione per evitare che un utente inesperto possa danneggiare il sistema o lapplicazione. Il problema stato risolto introducendo alla creazione dell Activity BYNightProjectActivity la seguente riga di codice :
StrictMode.enableDefaults(); utilizzabile solo da Android 2.3 e superiore

che abilita i permessi di default dellapplicazione , tra cui quello di abilitare la connessione Internet.

(Si tenga presente che il Browser dell emulatore si collegava ad Internet e si era cercato di modificare il Manifest senza nessun risultato).

Permettere lesplicita uscita dall applicazione


Stranamente da quanto si possa pensare non stato facile implementare lesplicita uscita dell applicazione - presente nellActivity BYNightProjectActivity tramite il tasto Esci - utilizzando la chiamata metodo di uscita quale finish(); o System.exit(0);. Trovare documentazione e una soluzione pertinente a tale scopo non stato facile. Il perch della difficolt ad uscire dell applicazione risiede nel fatto che per chiudere lapplicazione si deve chiudere la MAIN Activity, che nel nostro progetto la Splash, ma proprio per come strutturata questa classe e per la politica LIFO delle Activity sopra descritta, la soluzione che si adottata mandare un Intent di uscita all Activity Splash quando si preme il pulsante Esci e chiudere le singole Activity ogni volta che si passava da una allaltra (tranne per lActivity BYNightProjectActivity che concettualmente la nostra MAIN Activity).

You might also like