Sviluppo di applicazioni mobili - a.a. 2014/15

Avvisi

Logistica e testi

Logistica

Libri di testo

Materiale di approfondimento

Lucidi delle lezioni

  1. Prima lezione: lucidi.
    Introduzione al corso, logistica, modalità d'esame. Breve storia di Android, stato del mercato, l'ambiente di sviluppo, dettagli sull'installazione. (Vincenzo Gervasi)
  2. Seconda lezione: lucidi (prima parte).
    Architettura di un sistema Android: kernel, sandbox, framework. Linux, Dalvik, ART, e la sicurezza. Struttura di un'applicazione Android (in sviluppo, in deployment, in esecuzione). (Vincenzo Gervasi)
  3. Terza lezione: lucidi (seconda parte).
    l sistema delle risorse: architettura generale, risorse alternative, esempi. AndroidManifest.xml. Hello World! (Vincenzo Gervasi)
  4. Quarta lezione: lucidi (prima parte).
    Componenti di un'applicazione: activity, service, broadcast receiver, content provider. Comunicazione fra componenti attraverso Intent. Ancora su AndroidManifest.xml. Dettagli su Activity (prima parte). (Vincenzo Gervasi)
  5. Quinta lezione: lucidi (seconda parte).
    Il ciclo di vita di un'activity. Salvataggio e ripristino dello stato. Salvataggio automatico dello stato della UI. Esempio: Calcolatore BMI. (Vincenzo Gervasi)
  6. Sesta lezione: lucidi (prima parte).
    Definire la UI di un'Activity. Layout & View. Interazione (con richiami sui Listener). Il sistema dei menu. (Vincenzo Gervasi)
  7. Settima lezione: lucidi (seconda parte).
    Il sistema dei menu (seconda parte): menu contestuali, pop-up, contextual action bar, popolamento in base a Intent. Strumenti per lo sviluppo: Android Lint, ADB, DDM (dimostrazione).
  8. Ottava lezione: lucidi.
    Ancora sulla UI. Scrivere proprie View; negoziazione del layout, repaint. La pipeline di rendering 2D e le classi Canvas e Paint. Un esempio completo. Scrivere propri layout manager. Esempio: EqLayout. Temi e stili. (Vincenzo Gervasi)
  9. Nona lezione: lucidi.
    Ancora sulla UI. ListView statiche e dinamiche. Data adapter e binding. Altri usi di adapter. RecyclerView: pattern e usi tipici. (Vincenzo Gervasi)
  10. Decima lezione: lucidi.
    Ancora sulla UI. La classe WebView: uso, configurazione, specializzazione; binding fra Java e Javascript. La classe Drawable e le sue sottoclassi (con dettagli su 9 patch). Notifiche all'utente: Toast e Notification. (Vincenzo Gervasi)
  11. Undicesima lezione: lucidi.
    Ancora sulla UI. Dialog, Fragment, DialogFragment. (Vincenzo Gervasi)
  12. Dodicesima lezione: lucidi.
    Tematiche di storage. Storage temporaneo: salvataggio temporaneo dello stato, Bundle e Parcelable. Storage permanente: preferenze, PreferenceScreen e PreferenceActivity; accesso al file system. (Vincenzo Gervasi)
  13. Tredicesima lezione: lucidi.
    Accesso a database. Il DBMS SQLite e la classe SQLiteDatabase. Eseguire statement SQL. Query e la classe Cursor. Incapsulare l'accesso al database: la classe SQLOpenHelper e i pattern di progettazione relativi.
    Condivisione di dati su Android. ContentProvider e ContentResolver. Accesso a ContentProvider di sistema; il meccanismo delle URI. Scrivere ed esportare propri ContentProvider. La gestione dei permessi. (Vincenzo Gervasi)
  14. Quattordicesima lezione: lucidi.
    ultithreading. Ripasso / anticipazione sul multithreading in Java: Thread e Runnable, controllo di thread, meccanismi di notifica (wait/notify) e serializzazione (synchronized). La classe AsyncTask. Altri approcci all'esecuzione asincrona: post() e runOnUiThread(). Struttura del dispatcher di Android: Handler, Looper, messaggi e code. (Vincenzo Gervasi)
  15. Quindicesima lezione: lucidi.
    Casi tipici di programmazione in background: uso di AsyncTask per il caricamento di immagini da web; i Loader e l'uso di cursori asincroni; uso del servizio DownloadManager e del ContentProvider associato; AsyncPlayer. Esempi. (Vincenzo Gervasi)
  16. Sedicesima lezione: lucidi.
    Segnalazioni broadcast; i Broadcast Receiver. Registrazione statica (in XML) e dinamica (a run-time) di un Receiver. Invio di messaggi broadcast. Le varianti con permessi, serializzazione, terminazione, raccolta risultati, persistenza. Gli allarmi. Il servizio AlarmManager e le varie tipologie di allarmi (con wake-up, ripetuti, imprecisi). ((Vincenzo Gervasi)
  17. Diciassettesima lezione: lucidi.
    Esecuzione in background: i Services. Ciclo di vita di un Service. Servizi bound (con approfondimenti su IntentService) e unbound. Esempio: il Random Music Player. (Vincenzo Gervasi)
  18. Diciottesima lezione: lucidi.
    Accesso ai sensori. Sensor discovery; i diversi tipi di sensori; ottenere le letture tramite callback. Pooling dei SensorEvent e cautele relative. Esempio: Sensors.java. (Vincenzo Gervasi)
  19. Diciannovesima lezione: lucidi (prima parte).
    Servizi di localizzazione. LocationManager e LocationProvider; processo di discovery; uso di listener e intent; strategie per la selezione delle locazioni; esempi; Proximity Alert. Aspetti etici e giuridici del tracking. Geocoding; forward e reverse geocoding; l'oggetto Geocoder; la classe Address; esempi. (Vincenzo Gervasi)
  20. Ventesima lezione: lucidi.
    Le API di Google Maps. MapView e Maps API v1. Google Play Services e Maps API v2. L'oggetto GoogleMap e il controllo della camera. Uso di Marker. (Vincenzo Gervasi)
  21. Ventunesima lezione: lucidi.
    L'architettura multimediale di Android. Registrazione e riproduzione di audio e video. La gestione della fotocamera. Esempi. (Vincenzo Gervasi)
  22. Ventiduesima lezione: lucidi.
    Tecnologie di rete. Networking TCP/IP in Java. Il ConnectivityManager. Bluetooth: introduzione, discovery, pairing, comunicazioni. Wi-Fi Direct: design del framework, discovery, connessione, trasferimento. Cenni su NFC.(Vincenzo Gervasi)

Esami e progetti

Modalità d'esame

Gli appelli d'esame si tengono presso lo studio del docente, stanza 305 del Dipartimento di Informatica. Gli studenti devono aver consegnato, prima della data fissata, la documentazione e il codice (sorgente ed eseguibile) del loro progetto, tramite una email a gervasi@di.unipi.it.

Lo studente dovrà presentarsi fornito di computer portatile su cui è installato l'ambiente di sviluppo utilizzato, con il progetto in forma sorgente. L'esame consisterà in una presentazione/dimostrativo dell'applicazione, a cura dello studente, e di un walkthrough del codice, accompaganto da domande di natura teorica.

Gli studenti che non disponessero di un computer portatile adatto, possono contattare il docente con sufficiente anticipo per organizzare modalità alternative (per esempio, lo svolgimento dell'esame presso un laboratorio didattico).

Date degli appelli

Le date si riferiscono alla data di consegna (per via elettronica) del progetto. Gli orali si svolgono tipicamente nei giorni immediatamente successivi, secondo un calendario che dipende dal numero di consegne.
  1. 8 Giugno 2015
  2. 29 Giugno 2015
  3. 13 Luglio 2015
  4. 7 Settembre 2015