SlideShare ist ein Scribd-Unternehmen logo
1 von 144
Android Code Camp, Urbino — 2012.

Benvenuti.


Android
Code Camp
Android Code Camp, Urbino — 2012.

Scaletta day 1.
Il mercato degli smartphone.
Il progetto Android.
L‘architettura di Android.
L‘ecosistema.
Panoramica delle applicazioni.
Struttura di un progetto Android.
Setup dell‗ambiente di sviluppo (prova pratica).
„Hello World.―
Android Code Camp, Urbino — 2012.

Mobile market.
Il mercato degli smartphone.

Numeri e crescita.
Il mercato di Android.
Attivazioni.
Il mercato delle applicazioni.
Frammentazione.
Android Code Camp, Urbino — 2012.

Il mercato degli smartphone.
433 milioni di unità nel 2011.
616 milioni di unità previste nel 2012.

• Crescita del mercato (contrazione del
  mercato dei feature phones).
• Obsolescenza del prodotto.

Tablet: 320 milioni di unità previste, 2015.
Android Code Camp, Urbino — 2012.

   Il mercato degli smartphone.
                                          2011
                              2.5   3.9

          18.3


                                                                              50.8




12.5




                 20.4



            Android     iOS   BlackBerry    Symbian   Windows Phone   Altri
Android Code Camp, Urbino — 2012.

Il mercato degli smartphone.
                                  2012
                          5.4    3.6
                   6.8
           7.4



26




                                                                         104.8




         Android   iOS   BlackBerry    Symbian   Windows Phone   Altri
Android Code Camp, Urbino — 2012.

Il mercato di Android.
Crescita vertiginosa (+106% previsto).

Principalmente device Samsung (33%).

2012:
500 milioni di dispositivi Android attivati.
1.3 milioni di attivazioni al giorno.
Android Code Camp, Urbino — 2012.
Android Code Camp, Urbino — 2012.

Il mercato delle applicazioni.
Android < iOS:
    Più di 400.000 applicazioni,
    contro 500.000 per iOS.

• Google Play
• Amazon AppStore for Android
• Altri: GetJar, AppBrain, etc.
Android Code Camp, Urbino — 2012.

Il mercato delle applicazioni.
Android < iOS:
    Solo ¼ del guadagno in media.
    Segmento di mercato diverso.

       Quasi il 70% delle applicazioni sono
       gratuite o seguono il modello
       freemium (contro 50% iOS).

       ―Frammentazione‖.
Android Code Camp, Urbino — 2012.

Frammentazione.
Android Code Camp, Urbino — 2012.

Frammentazione.
Android Code Camp, Urbino — 2012.

Android.
Il progetto dell‘OS mobile Google.

Storia.
Versioni ed evoluzione.
Il progetto open-source.
Android Code Camp, Urbino — 2012.

La storia di Android.
2003: Andy Rubin fonda ―Android Inc‖.
       “...smarter mobile devices that are more aware of
         its owner's location and preferences.”


2004: Apple avvia ―Project Purple‖,
    un progetto segreto con AT&T.

2005: Google acquisisce Android Inc e
    continua lo sviluppo del sistema.
Android Code Camp, Urbino — 2012.

La Storia di Android.
2007, jan: Apple rilascia il primo iPhone.

2007, nov: Google, HTC, Samsung
rivelano
      l‘Open Handset Alliance e Android.

2008: primo telefono Android:
    HTC Dream (G1).
Android Code Camp, Urbino — 2012.

Versioni di Android.
 Anno Versione Nome in codice
 2008        1.0 n/a
 2009        1.1 Petit Four
             1.5 Cupcake
             1.6 Donut
             2.0 Eclair
 2010        2.2 Froyo (Frozen Yogurt)
             2.3 Gingerbread
 2011        3.0 Honeycomb
             4.0 Ice Cream Sandwich
 2012        4.1 Jelly Bean
     ?       4.2 K…?
Android Code Camp, Urbino — 2012.

       Versioni di Android.

                                                 1.5
                                                 Soft keyboard, clipboard,
                                                 video…




1.6
Resolution independence



                                    2.0
                                    Maps,
                                    Navigation
Android Code Camp, Urbino — 2012.

Versioni di Android.
                           3.0
                           Stile digitale, tablet optimization




                                           4.0
                     Halo theme, Project Butter
                           Google Now, Roboto
Android Code Camp, Urbino — 2012.

Android: progetto open source.
Ottobre 2010, Steve Jobs:

               „Google likes to characterize
               Android as open and iOS as
               closed. We think this is
               disingenuous. […] The real
               difference is integrated
               versus fragmented.”
Android Code Camp, Urbino — 2012.

Android: progetto open source.
Android Code Camp, Urbino — 2012.

Android: progetto open source.
Il codice di Android è disponibile sotto
licenze „free― e „open source―.

Linux kernel (Open Handset Alliance):
     GNU GPL v2, pubblico.

Android system (Google):
    Rete, telefonia, market, apps.
    Apache License v2.0, privato.
Android Code Camp, Urbino — 2012.

Android: progetto open source.
Produzione di un „flagship phone― da parte
di Google (Nexus), seguito da rilascio del
codice (OEM).

Google Play disponibile solo su licenza.

„Honeycomb incident― (2011).

Licenza incompatibile con GPL (FSF).
Android Code Camp, Urbino — 2012.

L’architettura..
Architettura del sistema operativo.

Kernel Linux.
Librerie native.
Runtime Android.
  Virtual Machine Dalvik.
  Core Libraries.
Application framework.
Livello applicazioni.
Android Code Camp, Urbino — 2012.

L’architettura.
Android Code Camp, Urbino — 2012.

Kernel Linux.
Kernel 2.6+.

Utilizzato per la gestione dei processi e dei
thread, per la gestione a basso livello della
memoria, per lo stack di rete, per la
sicurezza, per il modello dei driver.
Android Code Camp, Urbino — 2012.

    Librerie native.
    Librerie C/C++ eseguite sopra al kernel
    Linux ed utilizzate in diversi ambiti dal
    sistema Android.

Espongono inoltre funzionalità agli
sviluppatori tramite l'application
framework.
Android Code Camp, Urbino — 2012.

Runtime Android.
Ciò che rende un dispositivo Android
diverso da un'implementazione mobile
Linux.

Tramite l'utilizzo combinato della Dalvik
Virtual Machine e delle Core Libraries
rende possibile il funzionamento delle
applicazioni Android.
Android Code Camp, Urbino — 2012.

Virtual machine.
Implementazione software di una
macchina (con un certo Instruction Set
Architecture) che esegue programmi come
una macchina reale.

Virtualization: simulazione di un ambiente
in cui Guest ISA e Host ISA sono gli stessi.

Emulation: simulazione di un ambiente in
cui Guest ISA e Host ISA sono diversi.
Android Code Camp, Urbino — 2012.

Java virtual machine.
Macchina virtuale che esegue programmi
scritti in byte-code: rappresentazione
intermedia tra il linguaggio macchina e il
codice sorgente Java.

JVM è una specifica di Oracle (ex Sun).

Principali implementazioni:
HotSpot – OpenJDK (GPL).
HotSpot – OracleJDK.
Android Code Camp, Urbino — 2012.

Dalvik virtual machine.
Macchina virtuale che esegue file .dex
(Dalvik Executable).

Sorgente Java compilato in file .class e
trasformato in formato .dex.

Ogni applicazione Android viene eseguita
in un processo separato con la propria
istanza della Dalvik virtual machine.

JIT compiler (versione 2.2).
Android Code Camp, Urbino — 2012.

Dalvik vs. JVM.
Dalvik < JVM.
Ma il problema è multidimensionale.

• Register-based.
• Efficiente con più VMs.
• Footprint
  minimo
  in memoria.
• Startup
  time ridotto.
Android Code Camp, Urbino — 2012.

Core libraries.
Dalvik non rispetta la specifica J2SE,
né quella J2ME.

Le core libraries forniscono la maggior
parte delle funzionalità disponibili nelle
librerie Java standard, così come librerie
specifiche per Android.
Android Code Camp, Urbino — 2012.

Application framework.
Fornisce servizi importanti, incapsulati in
oggetti Java, alle applicazioni di livello
sovrastante.

Sono disponibili alla stessa maniera sia
per applicazioni di sistema che per
applicazioni di terze parti.
Android Code Camp, Urbino — 2012.

Livello applicazioni.
Applicazioni a livello utente scritte in
linguaggio Java.


                                    App di sistema
                                           =
                                    App terze parti
Android Code Camp, Urbino — 2012.

L’ecosistema.
Ecosistema di sviluppo.

Android SDK.
Eclipse IDE.
Application Programming Interfaces.
Android Code Camp, Urbino — 2012.

SDK: emulatore.
Software che emula il funzionamento e
l‗aspetto di una configurazione hardware
virtuale (AVD: Android Virtual Device).
Android Code Camp, Urbino — 2012.

SDK: emulatore.
Interfaccia user-friendly per la
configurazione dei propri AVD.
Android Code Camp, Urbino — 2012.

SDK: tools.
Logcat: raccoglie log di un device Android.

Lint: analisi statica per ottimizzazione e
rilevazione errori comuni.

Proguard: riduce la dimensione, ottimizza
ed offusca il codice prodotto. Lo rende più
rapido e resistente al reverse engineering.
Android Code Camp, Urbino — 2012.

SDK: Dalvik Debug Monitor Serve
Strumento per il debug di dispositivi
Android, con raccolta di informazioni su
processi, thread, heap, logcat ed
emulazione di eventi.
Android Code Camp, Urbino — 2012.

SDK: Android Developer Tools.
Plugin per IDE Eclipse.
Semplifica creazione, compilazione e
mantenimento di progetti.
Integra tool di sviluppo.
Include editor grafici e documentazione.
Android Code Camp, Urbino — 2012.

Eclipse.
Ambiente di sviluppo
open-source,
multi-piattaforma e
multi-linguaggio.

È la piattaforma di
riferimento per Android.

Alternative:
ANT, NetBeans…
Android Code Camp, Urbino — 2012.

Android APIs.
Android Code Camp, Urbino — 2012.

Android 1.5, API 3.
Riproduzione e cattura audio/video.
Riconoscimento vocale.
Widget.
Notifiche.
WebView.
Android Code Camp, Urbino — 2012.

Android 1.6, API 4.
Gestures.

Sintesi vocale.

Supporto CDMA.

Supporto per dimensioni e densità di
schermi variabili.
Android Code Camp, Urbino — 2012.

Android 2.1, API 7.
Supporto Bluetooth 2.1.

Live Wallpapers.
Android Code Camp, Urbino — 2012.

Android 2.2, API 8.
JIT compiler.

Supporto installazione in SD card.
Miglioramento del riconoscimento vocale
ed apertura a terze parti.
Supporto alla tecnologia Flash.
Android Code Camp, Urbino — 2012.

Android 2.3, API 9/10.
Supporto nativo a Voip (SIP).

Supporto a NFC.

Garbage Collector concorrente.

Supporto ad altri formati multimediali.
Android Code Camp, Urbino — 2012.

Android 3.0, API 11.
Fragments.

ActionBar.

Nuove API per il drag and drop.

Supporto per l'accelerazione hardware 2D.

Nuovo framework 3D renderscript.

Supporto multimediale migliorato.
Android Code Camp, Urbino — 2012.

Android 3.1, API 12.
Supporto a periferiche USB.

Widget ridimensionabili.

Supporto multimediale migliorato.
Android Code Camp, Urbino — 2012.

Android 4.0.1, API 14.
Merge tra versione tablet e smartphone.
Linux kernel 3.x.
UI riprogettata per maggior coerenza ed
unificazione.
Notifiche più potenti.
Supporto per riconoscimento vocale
continuo.
API sociali.
API di basso livello per lo streaming.
Android Code Camp, Urbino — 2012.

Android 4.1.3, API 16.
Project Butter.
Notifiche espandibili.
Social API migliorate.
Riconoscimento vocale avanzato.
Sintesi vocale migliorata.
Google Now.
Abbandono ufficiale della tecnologia Flash.
Android Code Camp, Urbino — 2012.

Panoramica applicazioni.
Elementi principali di un app.

Activity.
Service.
Content provider.
Broadcast receiver.
Intent.
Widget.
Fragment.
Notification.
Android Code Camp, Urbino — 2012.

Activity.
Ogni activity rappresenta una schermata di
un‘applicazione.
Android Code Camp, Urbino — 2012.

Activity.
Ogni activity dovrebbe equivalere ad
un'attività atomica dell'utente.
Android Code Camp, Urbino — 2012.

Activity.
Possono avere un valore di ritorno.
Android Code Camp, Urbino — 2012.

Activity.

Poi ci ritorniamo…
Android Code Camp, Urbino — 2012.

Panoramica applicazioni.
Elementi principali di un app.

Activity.
Service.
Content provider.
Broadcast receiver.
Intent.
Widget.
Fragment.
Notification.
Android Code Camp, Urbino — 2012.

Service.
Un‘attività dell'app o del sistema invisibile
all'utente (gira in background).

Alcuni esempi:
     Raccoglie dati del sistema.
     Aggiorna le informazioni di una
     particolare app.
     Scarica nuovi feed RSS da un server.
Android Code Camp, Urbino — 2012.

Service.
Non comunica direttamente con l‘utente
ma può comunicare con le activity (anche
di altre app) e con il sistema.
Android Code Camp, Urbino — 2012.

Service.
Se fondamentali per un‘applicazione posso
essere istanziati come foreground service.
Android Code Camp, Urbino — 2012.

Panoramica applicazioni.
Elementi principali di un app.

Activity.
Service.
Content provider.
Broadcast receiver.
Intent.
Widget.
Fragment.
Notification.
Android Code Camp, Urbino — 2012.

Content provider.
• È un‘astrazione di insiemi di dati
  strutturati.
• Espone metodi CRUD (create, retrieve,
  update, and delete).
• Usato per condividere dati ad altre
  applicazioni o per gestirli privatamente.

Android ne mette a disposizione molti già
pronti e se ne possono implementare di
personalizzati.
Android Code Camp, Urbino — 2012.

Content provider.
Alcuni esempi di content provider:

•   Lista dei contatti.
•   Lista delle immagini sul dispositivo.
•   Dati che risiedono in un DB SQLite.
•   Dati che risiedono su un web service.
Android Code Camp, Urbino — 2012.

Panoramica applicazioni.
Elementi principali di un app.

Activity.
Service.
Content provider.
Broadcast receiver.
Intent.
Widget.
Fragment.
Notification.
Android Code Camp, Urbino — 2012.

Broadcast receiver.
Sistema per la comunicazione
intra-applicazione/intra-processo.

Un componente a cui è delegata la
ricezione di intent in broadcast…
Android Code Camp, Urbino — 2012.

Intent.
Costituiscono il sistema di messaggistica
fra i vari componenti del sistema.

Ogni intent è una struttura dati che
incapsula dati. Questi dati costituiscono
una astrazione di:
     Un‘operazione da eseguire.
     Un evento che si è appena verificato.
Android Code Camp, Urbino — 2012.

Intent.
Dati di esempio:
Campo                     Valore
Component name            it.uniurb.codecamp.test
Action                    ACTION_CALL
Data
  URI                     tel:07224475
  Type                    integer
Category                  CATEGORY_LAUNCHER
Extras                    "tel_number":int
Flags                     FLAG_ACTIVITY_SINGLE_TOP
Android Code Camp, Urbino — 2012.

Intent.
Inviare un‗immagine:
Campo          Valore
Action         SEND
Data           content://media/external/pic16


Visualizzare un punto su Google Maps:
Campo          Valore
Action         VIEW
Data           geo:latitude,longitude?z=zoom
Android Code Camp, Urbino — 2012.

Intent.
Il mittente è sempre noto mentre il
ricevente può non esserlo a priori.
Android Code Camp, Urbino — 2012.

Intent espliciti.
Il nome (la classe) del componente
destinatario è specificato.
     Solo Activity.
     Solo Activity nel proprio contesto.
Android Code Camp, Urbino — 2012.

Intent impliciti.
Android cerca il componente per noi:
    Se ne trova uno, lo attiva.

       Se ne trova più di uno,
       viene chiesto all‘utente quale
       scegliere.

       Se non ne trova nessuno,
       l'avvio fallisce
Android Code Camp, Urbino — 2012.

Impliciti intent resolution.
In base al tipo del componente.
     (Activity, Service, Broadcast receiver).

In base al campo ACTION.

In base al campo CATEGORY.

In base al campo DATA (URI e Type).
Android Code Camp, Urbino — 2012.

Broadcast receiver (reprise).
Un componente a cui è delegata la
  ricezione di intent in broadcast.
Può essere/non essere associato ad un
  altro componente.
Non possiede una interfaccia grafica.
Può istanziare notifiche.
Può avviare un altro componente.
Android Code Camp, Urbino — 2012.

Broadcast receiver (esempi).
Ricezione dei cambiamenti nel livello di
carica della batteria del dispositivo.

Ricezione dell‘evento download del file
completato.

Ricezione dell‘evento boot completato e
conseguente avvio di un servizio in
background.
Android Code Camp, Urbino — 2012.

Panoramica applicazioni.
Elementi principali di un app.

Activity.
Service.
Content provider.
Broadcast receiver.
Intent.
Widget.
Fragment.
Notification.
Android Code Camp, Urbino — 2012.

Widget.
Inglobati in altre applicazioni. (Risiedono
all‘interno di ―App Widget Host‖.)

Periodi di aggiornamento lunghi.
(Minimo: 30 minuti.)

Ricevono input dall‘utente e aggiornamenti
tramite un Broadcast Receiver (che
devono implementare).
Android Code Camp, Urbino — 2012.

Esempi di widget.
Android Code Camp, Urbino — 2012.

Esempi di widget.
Android Code Camp, Urbino — 2012.

Panoramica applicazioni.
Elementi principali di un app.

Activity.
Service.
Content provider.
Broadcast receiver.
Intent.
Widget.
Fragment.
Notification.
Android Code Camp, Urbino — 2012.

Fragment.
Componenti modulari di un‘activity.

Hanno un proprio ciclo di vita.

Possono essere rimossi o aggiunti mentre
l‘activity è attiva.

Nascono come risposta all‘esigenza di
mettere un‘activity dentro un‘altra.
Android Code Camp, Urbino — 2012.

Esempio di fragment.




   Portrait                         Landscape
Android Code Camp, Urbino — 2012.

Panoramica applicazioni.
Elementi principali di un app.

Activity.
Service.
Content provider.
Broadcast receiver.
Intent.
Widget.
Fragment.
Notification.
Android Code Camp, Urbino — 2012.

Notification.
Servono per informare l‘utente di un
evento scatenato o avvenuto:
    Nel sistema.

       Nell‘activity con cui l‘utente sta
       interagendo.

       Nei componenti senza interfaccia.
       (Come i servizi.)
Android Code Camp, Urbino — 2012.

Toast notification.
Per eventi avvenuti in background.
Nessun input dall‘utente.
Poco più che un output su console…
Android Code Camp, Urbino — 2012.

Dialog notification.
Per eventi relativi all‘activity corrente.
(Caricamento, conferma, etc…)

Supportano l‘input utente.
Android Code Camp, Urbino — 2012.

Status notification.
Per eventi relativi avvenuti in background.
Richiedono l‘input utente.
Sono persistenti.
Tipicamente risiedono nella barra delle
notifiche finché l‘utente non interagisce
cliccandoci o cancellandole.

                       Al click spesso viene
                       lanciata un‘activity.
Android Code Camp, Urbino — 2012.

Approfondimenti.
Altri dettagli sulle applicazioni.

Layout.
Il back stack di navigazione.
Ciclo di vita delle Activity.
Ciclo di vita dei Service.
Ciclo di vita dei Fragment.
Android Code Camp, Urbino — 2012.

     Layout.
     Composta genericamente da
     View e ViewGroup (e Fragment).

TableLayout




   EditText

   TextView


    Button
Android Code Camp, Urbino — 2012.

Layout.
Il layout è definito (normalmente) tramite
un file xml.
                                    <RelativeLayout
                                      xmlns:android="http://schemas.android.com/apk/res/android"
                                      xmlns:tools="http://schemas.android.com/tools"
                                      android:layout_width="match_parent"
                                      android:layout_height="match_parent" >

                                      <TextView
                                        android:id="@+id/rss_title"
                                        android:layout_width="wrap_content"
                                        android:layout_height="wrap_content"
                                        … />

                                      <ListView
                                        android:id="@+id/rss_list"
                                        android:layout_width="match_parent"
                                        android:layout_height="wrap_content"
                                        …>
                                      </ListView>

                                      <Button
                                        android:id="@+id/load"
                                        android:layout_width="wrap_content"
                                        … />

                                    </RelativeLayout>
Android Code Camp, Urbino — 2012.

Approfondimenti.
Altri dettagli sulle applicazioni.

Layout.
Il back stack di navigazione.
Ciclo di vita delle Activity.
Ciclo di vita dei Service.
Ciclo di vita dei Fragment.
Android Code Camp, Urbino — 2012.

Il back stack di navigazione.
Ogni activity appartiene ad un task.
Ogni task contiene una collezione di
activity nell‘ordine in cui sono state lanciate
(back stack).
Android Code Camp, Urbino — 2012.

Il back stack di navigazione.
Il sistema gestisce contemporaneamente
più task ma solo uno per volta è quello in
foreground.




Un nuovo task inizia ogni volta che
un‘applicazione è avviata dal launcher:
   <action android:name="android.intent.action.MAIN" />
   <category android:name="android.intent.category.LAUNCHER" />

oppure con le modalità di lancio.
Android Code Camp, Urbino — 2012.

Il back stack di navigazione.
La struttura di un task viene alterata:
• Lanciando una nuova activity (crescita).
• Tasto Back (decrescita).

Lo stato di un task (back/fore) cambia:
• C‘è un‘interruzione per eventi esterni.
• Tasto home.
• Avvio di un‘activity dal menu delle
  activity recenti.
Android Code Camp, Urbino — 2012.

Modalità di lancio.
Normalmente:
• Quando viene avviata un‘activity per la
  prima volta questa viene aggiunta al
  task attuale (oppure ad un task vuoto
  se MAIN/LAUNCHER).
• Anche se la stessa
  activity era già stata
  lanciata ne viene
  creata una nuova
  istanza.
Android Code Camp, Urbino — 2012.

       Modalità di lancio.
       Le activity posso essere lanciate con
       modalità di lancio particolari.
       Definite nel manifest o nell‘intent di lancio.
  Modalità                                 Conseguenze
   Default       Viene creata una nuova activity. Istanze diverse della stessa
                 possono appartenere a diversi task. Ogni task può avere più
                 istanze della stessa.
  SingleTop      Viene creata una nuova istanza solo se l‘activity non è al top dello
                 stack (onNewIntent()). Il resto come Default.
 SingleTask      Se c‘è già un‘istanza in un task viene riavviata quella altrimenti
                 viene avviata una nuova activity in un nuovo task. Può esserci
                 sempre solo un‘istanza dell‘activity nel sistema.
SingleInstance   Come sopra ma l‘activity è sempre l‘unica presente nel suo task.
Android Code Camp, Urbino — 2012.

Modalità di lancio.
DEMO…
Android Code Camp, Urbino — 2012.

Approfondimenti.
Altri dettagli sulle applicazioni.

Layout.
Il back stack di navigazione.
Ciclo di vita delle Activity.
Ciclo di vita dei Service.
Ciclo di vita dei Fragment.
Android Code Camp, Urbino — 2012.

Ciclo di vita delle Activity.
Android Code Camp, Urbino — 2012.

Ciclo di vita delle Activity.
Android Code Camp, Urbino — 2012.

Ciclo di vita delle Activity.
Android Code Camp, Urbino — 2012.

Ciclo di vita delle Activity.
Android Code Camp, Urbino — 2012.

Ciclo di vita delle Activity.
Android Code Camp, Urbino — 2012.

Ciclo di vita delle Activity.
DEMO…
Android Code Camp, Urbino — 2012.

Ciclo di vita delle Activity.
Salvataggio dello stato dell‘activity.
Android Code Camp, Urbino — 2012.

      Ciclo di vita delle Activity.
      Un‘activity può essere distrutta dal sistema
      per recuperare memoria MA l‘utente si
      aspetta di ritrovare l‘activity nello stesso
      stato.
onSaveInstanceState(Bundle)
onRestoreInstanceState(Bundle)
onCreate(Bundle)
Android Code Camp, Urbino — 2012.

Ciclo di vita (Esempi).
Rotazione dello schermo quando c‘è una
ListView caricata con dati remoti.

Quando sono chiamati?
      onRestoreInstanceState() subito
      dopo onStart(),
      onSaveInstanceState() prima di
      onStop() e forse prima di onPause().
Non ci sono garanzie che venga
effettivamente chiamato (es: back button)!
Android Code Camp, Urbino — 2012.

Ciclo di vita (Esempi).
Cosa salvare nel Bundle?
    Lo stato transitorio dell‘activity.
    Lo stato dell‘interfaccia (lo stato
    grafico di ogni View viene salvato in
    ogni caso).
Cosa non salvare nel Bundle?
    Le informazioni non strettamente
    relative a quell‘istanza dell‘activity.
    Le info persistenti dovrebbero essere
    registrate nel metodo onPause().
Android Code Camp, Urbino — 2012.

Approfondimenti.
Altri dettagli sulle applicazioni.

Layout.
Il back stack di navigazione.
Ciclo di vita delle Activity.
Ciclo di vita dei Service.
Ciclo di vita dei Fragment.
Android Code Camp, Urbino — 2012.

Started & bound services.
Started:
     Avviato da un altro componente
     invocando startService().
     Viene terminato o termina da solo.

Bound:
    Avviato da 1+ componenti
    invocando bindService().
    Sopravvive fino all‗ultimo
    unbindService().
Android Code Camp, Urbino — 2012.

Ciclo di vita dei Service.
Android Code Camp, Urbino — 2012.

Approfondimenti.
Altri dettagli sulle applicazioni.

Layout.
Il back stack di navigazione.
Ciclo di vita delle Activity.
Ciclo di vita dei Service.
Ciclo di vita dei Fragment.
Android Code Camp, Urbino — 2012.

Ciclo di vita dei Fragment.
Android Code Camp, Urbino — 2012.

Un progetto Android.
Struttura del progetto in Eclipse.

Cartelle.
Gestione delle risorse.
Manifest dell‗applicazione.
Android Code Camp, Urbino — 2012.

Cartelle di un progetto Android.
/src: sorgenti Java (oppure .aidl o altri)
/bin: compilati (.apk, ecc…)
/libs: librerie esterne
/gen: sorgenti generati (R.java)
/assets: risorse unmanaged (nel .apk)
/res: risorse managed (processati)
/AndroidManifest.xml: metadati
.properties, .cfg, .xml: altri files
Android Code Camp, Urbino — 2012.

Un progetto Android.
Struttura del progetto in Eclipse.

Cartelle.
Gestione delle risorse.
Manifest dell‗applicazione.
Android Code Camp, Urbino — 2012.

Android Asset Packaging Tool.
Ad ogni risorsa all‗interno della directory
/res viene assegnato un ID intero.
Si genera una classe R.java con:
     Una classe public static final per ogni
     tipo di risorsa.
     Un campo intero con il nome risorsa.

La classe viene compilata nel namespace.
Mappa <nome, ID intero>.
Android Code Camp, Urbino — 2012.

Versioni delle risorse.
Le versioni sono caratterizzate dal nome
della directory in cui sono locate.
• layout-long
• anim-v14
• drawable-en-rUS-land-night-notouch
  Lingua in inglese, in America, orientato
  orizzontalmente, è notte e non si dispone
  di interfaccia touch.

Risorsa scelta a runtime dal framework.
Android Code Camp, Urbino — 2012.

Creazione delle risorse.
Dichiarazione tramite XML:
   <Button android:id=" @+id/nice_button " />
   <string name=―hello_world‖> ciao mondo</string>




I file vengono creati nelle specifiche
sotto-directory di /res.
Android Code Camp, Urbino — 2012.

Accesso alle risorse.
Tramite XML:
   @[<package_name>:]<resource_type>/<resource_name>

   <Button android:text=" @string/hello_world " />



Tramite codice:
   [<package_name>.]R.<resource_type>.<resource_name>

   ImageView imageView = (ImageView)
       findViewById(R.id.myimageview);
   imageView.setImageResource(R.drawable.myimage);
Android Code Camp, Urbino — 2012.

Un progetto Android.
Struttura del progetto in Eclipse.

Cartelle.
Gestione delle risorse.
Manifest dell‗applicazione.
Android Code Camp, Urbino — 2012.

Manifest dell‘applicazione.
File AndroidManifest.xml nella root.

Descrive l‗applicazione, il nome del
package, il namespace, i permessi.
Dichiara che livello di API è richiesto.

Include la specifica di ogni componente:
     Activity, Service, Receiver, etc.
Android Code Camp, Urbino — 2012.

Tutorial.
Hello World in tutte le salse.

Preparazione dell‗ambiente di lavoro.
Creazione di un progetto.
„Hello World― sul log.
Layouts, callbacks e toast notifications.
Intent e navigazione.
Liste.
Status notifications.
Background service.
Android Code Camp, Urbino — 2012.

Preparazione dell‘ambiente.
Eclipse IDE.
Aggiungiamo l‗Android ADT:
        https://dl-ssl.google.com/android/eclipse/

Dopodiché scarichiamo l‗SDK.

…possiamo iniziare!
Android Code Camp, Urbino — 2012.

Tutorial.
Hello World in tutte le salse.

Preparazione dell‗ambiente di lavoro.
Creazione di un progetto.
„Hello World― sul log.
Layouts, callbacks e toast notifications.
Intent e navigazione.
Liste.
Status notifications.
Background service.
Android Code Camp, Urbino — 2012.

Creazione di un progetto.
Android Code Camp, Urbino — 2012.

Tutorial.
Hello World in tutte le salse.

Preparazione dell‗ambiente di lavoro.
Creazione di un progetto.
„Hello World― sul log.
Layouts, callbacks e toast notifications.
Intent e navigazione.
Liste.
Status notifications.
Background service.
Android Code Camp, Urbino — 2012.

Android log.
Classe android.util.Log.

Livelli di logging:
      ASSERT: Log.wtf()
      ERROR: Log.e()
      WARN: Log.w()
      INFO: Log.i()
      DEBUG: Log.d()
      VERBOSE: Log.v()
Android Code Camp, Urbino — 2012.




Per ogni chiamata al logger si passano:
     TAG: discriminatore.
     Messaggio: contenuto.
     Eccezione: opzionale.
Android Code Camp, Urbino — 2012.

Tutorial.
Hello World in tutte le salse.

Preparazione dell‗ambiente di lavoro.
Creazione di un progetto.
„Hello World― sul log.
Layouts, callbacks e toast notifications.
Intent e navigazione.
Liste.
Status notifications.
Background service.
Android Code Camp, Urbino — 2012.

Layout.
Permettono di strutturare l‗interfaccia
grafica di un‗applicazione.

Flessibili e dinamici.

LinearLayout.
RelativeLayout.
FrameLayout.
Android Code Camp, Urbino — 2012.

LinearLayout.
<LinearLayout
     android:layout_width=„match_parent“
     android:layout_height=„match_parent“
     android:orientation=„horizontal“
     >
     <Item1 />
     <Item2 />
     <Item3 />
</LinearLayout>
Android Code Camp, Urbino — 2012.

RelativeLayout.
<RelativeLayout>
     <Item1 />
     <Item2 layout_below=„Item1“
             layout_alignParentLeft=„true“ />
     <Item3 layout_below=„Item1“
            layout_alignParentRight=„true“ />
</RelativeLayout>
Android Code Camp, Urbino — 2012.

Button e callback.
<Button android:id=„@+id/buttonToast“ />

Button button = (Button)
     this.findViewById(R.id.buttonToast);

button.setOnClickListener(
     new OnClickListener(){

       @Override
       public void onClick(View arg0) {
       }
});
Android Code Camp, Urbino — 2012.

Toast notification.
Create tramite metodo statico.

Toast.makeText(Context,
     “Text”,
     Toast.LENGTH_SHORT).show();


Testo visualizzato in sovraimpressione per
la durata specificata.
Android Code Camp, Urbino — 2012.

Tutorial.
Hello World in tutte le salse.

Preparazione dell‗ambiente di lavoro.
Creazione di un progetto.
„Hello World― sul log.
Layouts, callbacks e toast notifications.
Intent e navigazione.
Liste.
Status notifications.
Background service.
Android Code Camp, Urbino — 2012.

Intent implicito.
Intent i = new Intent(
     Intent.ACTION_VIEW,
     Uri.parse("http://www.google.com"));
Context.startActivity(i);


Si sfrutta l‗intent ACTION_VIEW, definito dal
sistema.

Viene gestito dal browser (in questo caso).
Android Code Camp, Urbino — 2012.

Intent esplicito.
Intent i = new Intent(
     Context,
     Class);
Context.startActivity(i);


Intent diretto in maniera specifica ad una
classe in particolare (una Activity).

Non viene intercettata, né risolta dal
sistema.
Android Code Camp, Urbino — 2012.

Tutorial.
Hello World in tutte le salse.

Preparazione dell‗ambiente di lavoro.
Creazione di un progetto.
„Hello World― sul log.
Layouts, callbacks e toast notifications.
Intent e navigazione.
Liste.
Status notifications.
Background service.
Android Code Camp, Urbino — 2012.

Liste.
La lista è visualizzata da una ListView.

I dati sono gestiti da un ListAdapter:
      Gestisce l‗accesso ai dati.
      Ne determina la rappresentazione.
Android Code Camp, Urbino — 2012.

Tutorial.
Hello World in tutte le salse.

Preparazione dell‗ambiente di lavoro.
Creazione di un progetto.
„Hello World― sul log.
Layouts, callbacks e toast notifications.
Intent e navigazione.
Liste.
Status notifications.
Background service.
Android Code Camp, Urbino — 2012.

Componenti di una notifica.
Icona (nella barra e nel pannello).
Ticker (messaggio nella barra).
Numero in sovraimpressione.
Flags (AUTO_CANCEL, INSISTENT, etc).
Content view (nel pannello),
     può essere generato (LatestEvent).
PendingIntent che determina azione.
Identificatore univoco.
Android Code Camp, Urbino — 2012.

Aggiornamento notifiche.
Il pannello mostra una sola notifica per
ogni identificatore univoco.
Permette di avere una singola notifica per
ogni tipologia di avviso dell‗applicazione.

I PendingIntent possono essere
aggiornati dall‗applicazione (modifica
azione, ma non la notifica).
Android Code Camp, Urbino — 2012.

Tutorial.
Hello World in tutte le salse.

Preparazione dell‗ambiente di lavoro.
Creazione di un progetto.
„Hello World― sul log.
Layouts, callbacks e toast notifications.
Intent e navigazione.
Liste.
Status notifications.
Background service.
Android Code Camp, Urbino — 2012.

Background service.
Si utilizza un Intent per specificare il
maniera esplicita il servizio da avviare.

Intent serviceIntent = new Intent(
     Context, Service.class);

Context.startService(serviceIntent);

Weitere ähnliche Inhalte

Andere mochten auch

Android programming (ita)
Android programming (ita)Android programming (ita)
Android programming (ita)
Vinu Iaconissi
 

Andere mochten auch (11)

Sviluppare su OpenOffice.org con Java
Sviluppare su OpenOffice.org con JavaSviluppare su OpenOffice.org con Java
Sviluppare su OpenOffice.org con Java
 
Ciclo de Vida de uma Activity
Ciclo de Vida de uma ActivityCiclo de Vida de uma Activity
Ciclo de Vida de uma Activity
 
Conoscere Android per poterlo Programmare
Conoscere Android per poterlo Programmare Conoscere Android per poterlo Programmare
Conoscere Android per poterlo Programmare
 
Android programming (ita)
Android programming (ita)Android programming (ita)
Android programming (ita)
 
Quinta lezione android
Quinta lezione androidQuinta lezione android
Quinta lezione android
 
Lezione android esercizi
Lezione android esercizi Lezione android esercizi
Lezione android esercizi
 
Quarta lezioneandroid
Quarta lezioneandroidQuarta lezioneandroid
Quarta lezioneandroid
 
Tesi Forcolin Fabio
Tesi Forcolin FabioTesi Forcolin Fabio
Tesi Forcolin Fabio
 
Android programming
Android programmingAndroid programming
Android programming
 
Sviluppare app event-driven con RxJava su Android
Sviluppare app event-driven con RxJava su AndroidSviluppare app event-driven con RxJava su Android
Sviluppare app event-driven con RxJava su Android
 
Corso Android
Corso AndroidCorso Android
Corso Android
 

Ähnlich wie Android Code Camp 2012 - ita

Sviluppo di applicazioni mobile con PhoneGap
Sviluppo di applicazioni mobile con PhoneGapSviluppo di applicazioni mobile con PhoneGap
Sviluppo di applicazioni mobile con PhoneGap
DotNetMarche
 
Presentazione+Android
Presentazione+AndroidPresentazione+Android
Presentazione+Android
Nicola Pedot
 
Introduction to iOS development with Xamarin
Introduction to iOS development with XamarinIntroduction to iOS development with Xamarin
Introduction to iOS development with Xamarin
Raffaele Fanizzi
 
follow-app BOOTCAMP 3: Android
follow-app BOOTCAMP 3: Androidfollow-app BOOTCAMP 3: Android
follow-app BOOTCAMP 3: Android
QIRIS
 
Sviluppo apps multipiattaforma con visual studio e xamarin
Sviluppo apps multipiattaforma con visual studio e xamarinSviluppo apps multipiattaforma con visual studio e xamarin
Sviluppo apps multipiattaforma con visual studio e xamarin
Fabio Cozzolino
 

Ähnlich wie Android Code Camp 2012 - ita (20)

Android, panoramica e sviluppo
Android, panoramica e sviluppoAndroid, panoramica e sviluppo
Android, panoramica e sviluppo
 
MobileDevCamp2012 - Android
MobileDevCamp2012 - AndroidMobileDevCamp2012 - Android
MobileDevCamp2012 - Android
 
Sviluppo di App cross-platform con Cordova e HTML5
Sviluppo di App cross-platform con Cordova e HTML5Sviluppo di App cross-platform con Cordova e HTML5
Sviluppo di App cross-platform con Cordova e HTML5
 
Android Workshop
Android WorkshopAndroid Workshop
Android Workshop
 
Android
AndroidAndroid
Android
 
Android: il sistema operativo mobile di Google
Android: il sistema operativo mobile di GoogleAndroid: il sistema operativo mobile di Google
Android: il sistema operativo mobile di Google
 
iOS Ecosystem
iOS EcosystemiOS Ecosystem
iOS Ecosystem
 
Sviluppo di applicazioni mobile con PhoneGap
Sviluppo di applicazioni mobile con PhoneGapSviluppo di applicazioni mobile con PhoneGap
Sviluppo di applicazioni mobile con PhoneGap
 
Presentazione+Android
Presentazione+AndroidPresentazione+Android
Presentazione+Android
 
App vs mobile website - Intervento di Claudio Tonti (Websolute) a Branding 2....
App vs mobile website - Intervento di Claudio Tonti (Websolute) a Branding 2....App vs mobile website - Intervento di Claudio Tonti (Websolute) a Branding 2....
App vs mobile website - Intervento di Claudio Tonti (Websolute) a Branding 2....
 
App vs Mobile website: quale lo scenario vincente?
App vs Mobile website: quale lo scenario vincente?App vs Mobile website: quale lo scenario vincente?
App vs Mobile website: quale lo scenario vincente?
 
Introduction to iOS development with Xamarin
Introduction to iOS development with XamarinIntroduction to iOS development with Xamarin
Introduction to iOS development with Xamarin
 
Xamarin
XamarinXamarin
Xamarin
 
Introduzione al sistema operativo mobile Android
Introduzione al sistema operativo mobile AndroidIntroduzione al sistema operativo mobile Android
Introduzione al sistema operativo mobile Android
 
Workshop AngularJs, Cordova, Ionic - Politecnico di Milano
Workshop AngularJs, Cordova, Ionic - Politecnico di MilanoWorkshop AngularJs, Cordova, Ionic - Politecnico di Milano
Workshop AngularJs, Cordova, Ionic - Politecnico di Milano
 
follow-app BOOTCAMP 3: Android
follow-app BOOTCAMP 3: Androidfollow-app BOOTCAMP 3: Android
follow-app BOOTCAMP 3: Android
 
Multi-Device Hybrid Apps con Visual Studio e Apache Cordova
Multi-Device Hybrid Apps con Visual Studio e Apache CordovaMulti-Device Hybrid Apps con Visual Studio e Apache Cordova
Multi-Device Hybrid Apps con Visual Studio e Apache Cordova
 
Sviluppo apps multipiattaforma con visual studio e xamarin
Sviluppo apps multipiattaforma con visual studio e xamarinSviluppo apps multipiattaforma con visual studio e xamarin
Sviluppo apps multipiattaforma con visual studio e xamarin
 
Applicazioni mobili: strumenti, costi soluzioni e peformance
Applicazioni mobili: strumenti, costi soluzioni e peformanceApplicazioni mobili: strumenti, costi soluzioni e peformance
Applicazioni mobili: strumenti, costi soluzioni e peformance
 
Il Web su Mobile
Il Web su MobileIl Web su Mobile
Il Web su Mobile
 

Kürzlich hochgeladen

case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....
giorgiadeascaniis59
 
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptxNicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
lorenzodemidio01
 
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptxScienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptx
lorenzodemidio01
 

Kürzlich hochgeladen (18)

Lorenzo D'Emidio_Vita e opere di Aristotele.pptx
Lorenzo D'Emidio_Vita e opere di Aristotele.pptxLorenzo D'Emidio_Vita e opere di Aristotele.pptx
Lorenzo D'Emidio_Vita e opere di Aristotele.pptx
 
case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....
 
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptxNicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
 
descrizioni della antica civiltà dei sumeri.pptx
descrizioni della antica civiltà dei sumeri.pptxdescrizioni della antica civiltà dei sumeri.pptx
descrizioni della antica civiltà dei sumeri.pptx
 
Lorenzo D'Emidio_Vita di Cristoforo Colombo.pptx
Lorenzo D'Emidio_Vita di Cristoforo Colombo.pptxLorenzo D'Emidio_Vita di Cristoforo Colombo.pptx
Lorenzo D'Emidio_Vita di Cristoforo Colombo.pptx
 
Vuoi girare il mondo? educazione civica.
Vuoi girare il mondo? educazione civica.Vuoi girare il mondo? educazione civica.
Vuoi girare il mondo? educazione civica.
 
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptxScienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptx
 
Descrizione Piccolo teorema di Talete.pptx
Descrizione Piccolo teorema di Talete.pptxDescrizione Piccolo teorema di Talete.pptx
Descrizione Piccolo teorema di Talete.pptx
 
Tosone Christian_Steve Jobsaaaaaaaa.pptx
Tosone Christian_Steve Jobsaaaaaaaa.pptxTosone Christian_Steve Jobsaaaaaaaa.pptx
Tosone Christian_Steve Jobsaaaaaaaa.pptx
 
Presentazioni Efficaci e lezioni di Educazione Civica
Presentazioni Efficaci e lezioni di Educazione CivicaPresentazioni Efficaci e lezioni di Educazione Civica
Presentazioni Efficaci e lezioni di Educazione Civica
 
LE ALGHE.pptx ..........................
LE ALGHE.pptx ..........................LE ALGHE.pptx ..........................
LE ALGHE.pptx ..........................
 
Oppressi_oppressori.pptx................
Oppressi_oppressori.pptx................Oppressi_oppressori.pptx................
Oppressi_oppressori.pptx................
 
Lorenzo D'Emidio_Francesco Petrarca.pptx
Lorenzo D'Emidio_Francesco Petrarca.pptxLorenzo D'Emidio_Francesco Petrarca.pptx
Lorenzo D'Emidio_Francesco Petrarca.pptx
 
Lorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptx
Lorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptxLorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptx
Lorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptx
 
Aristotele, vita e opere e fisica...pptx
Aristotele, vita e opere e fisica...pptxAristotele, vita e opere e fisica...pptx
Aristotele, vita e opere e fisica...pptx
 
Scrittura seo e scrittura accessibile
Scrittura seo e scrittura accessibileScrittura seo e scrittura accessibile
Scrittura seo e scrittura accessibile
 
Quadrilateri e isometrie studente di liceo
Quadrilateri e isometrie studente di liceoQuadrilateri e isometrie studente di liceo
Quadrilateri e isometrie studente di liceo
 
discorso generale sulla fisica e le discipline.pptx
discorso generale sulla fisica e le discipline.pptxdiscorso generale sulla fisica e le discipline.pptx
discorso generale sulla fisica e le discipline.pptx
 

Android Code Camp 2012 - ita

  • 1. Android Code Camp, Urbino — 2012. Benvenuti. Android Code Camp
  • 2. Android Code Camp, Urbino — 2012. Scaletta day 1. Il mercato degli smartphone. Il progetto Android. L‘architettura di Android. L‘ecosistema. Panoramica delle applicazioni. Struttura di un progetto Android. Setup dell‗ambiente di sviluppo (prova pratica). „Hello World.―
  • 3. Android Code Camp, Urbino — 2012. Mobile market. Il mercato degli smartphone. Numeri e crescita. Il mercato di Android. Attivazioni. Il mercato delle applicazioni. Frammentazione.
  • 4. Android Code Camp, Urbino — 2012. Il mercato degli smartphone. 433 milioni di unità nel 2011. 616 milioni di unità previste nel 2012. • Crescita del mercato (contrazione del mercato dei feature phones). • Obsolescenza del prodotto. Tablet: 320 milioni di unità previste, 2015.
  • 5. Android Code Camp, Urbino — 2012. Il mercato degli smartphone. 2011 2.5 3.9 18.3 50.8 12.5 20.4 Android iOS BlackBerry Symbian Windows Phone Altri
  • 6. Android Code Camp, Urbino — 2012. Il mercato degli smartphone. 2012 5.4 3.6 6.8 7.4 26 104.8 Android iOS BlackBerry Symbian Windows Phone Altri
  • 7. Android Code Camp, Urbino — 2012. Il mercato di Android. Crescita vertiginosa (+106% previsto). Principalmente device Samsung (33%). 2012: 500 milioni di dispositivi Android attivati. 1.3 milioni di attivazioni al giorno.
  • 8. Android Code Camp, Urbino — 2012.
  • 9. Android Code Camp, Urbino — 2012. Il mercato delle applicazioni. Android < iOS: Più di 400.000 applicazioni, contro 500.000 per iOS. • Google Play • Amazon AppStore for Android • Altri: GetJar, AppBrain, etc.
  • 10. Android Code Camp, Urbino — 2012. Il mercato delle applicazioni. Android < iOS: Solo ¼ del guadagno in media. Segmento di mercato diverso. Quasi il 70% delle applicazioni sono gratuite o seguono il modello freemium (contro 50% iOS). ―Frammentazione‖.
  • 11. Android Code Camp, Urbino — 2012. Frammentazione.
  • 12. Android Code Camp, Urbino — 2012. Frammentazione.
  • 13. Android Code Camp, Urbino — 2012. Android. Il progetto dell‘OS mobile Google. Storia. Versioni ed evoluzione. Il progetto open-source.
  • 14. Android Code Camp, Urbino — 2012. La storia di Android. 2003: Andy Rubin fonda ―Android Inc‖. “...smarter mobile devices that are more aware of its owner's location and preferences.” 2004: Apple avvia ―Project Purple‖, un progetto segreto con AT&T. 2005: Google acquisisce Android Inc e continua lo sviluppo del sistema.
  • 15. Android Code Camp, Urbino — 2012. La Storia di Android. 2007, jan: Apple rilascia il primo iPhone. 2007, nov: Google, HTC, Samsung rivelano l‘Open Handset Alliance e Android. 2008: primo telefono Android: HTC Dream (G1).
  • 16. Android Code Camp, Urbino — 2012. Versioni di Android. Anno Versione Nome in codice 2008 1.0 n/a 2009 1.1 Petit Four 1.5 Cupcake 1.6 Donut 2.0 Eclair 2010 2.2 Froyo (Frozen Yogurt) 2.3 Gingerbread 2011 3.0 Honeycomb 4.0 Ice Cream Sandwich 2012 4.1 Jelly Bean ? 4.2 K…?
  • 17. Android Code Camp, Urbino — 2012. Versioni di Android. 1.5 Soft keyboard, clipboard, video… 1.6 Resolution independence 2.0 Maps, Navigation
  • 18. Android Code Camp, Urbino — 2012. Versioni di Android. 3.0 Stile digitale, tablet optimization 4.0 Halo theme, Project Butter Google Now, Roboto
  • 19. Android Code Camp, Urbino — 2012. Android: progetto open source. Ottobre 2010, Steve Jobs: „Google likes to characterize Android as open and iOS as closed. We think this is disingenuous. […] The real difference is integrated versus fragmented.”
  • 20. Android Code Camp, Urbino — 2012. Android: progetto open source.
  • 21. Android Code Camp, Urbino — 2012. Android: progetto open source. Il codice di Android è disponibile sotto licenze „free― e „open source―. Linux kernel (Open Handset Alliance): GNU GPL v2, pubblico. Android system (Google): Rete, telefonia, market, apps. Apache License v2.0, privato.
  • 22. Android Code Camp, Urbino — 2012. Android: progetto open source. Produzione di un „flagship phone― da parte di Google (Nexus), seguito da rilascio del codice (OEM). Google Play disponibile solo su licenza. „Honeycomb incident― (2011). Licenza incompatibile con GPL (FSF).
  • 23. Android Code Camp, Urbino — 2012. L’architettura.. Architettura del sistema operativo. Kernel Linux. Librerie native. Runtime Android. Virtual Machine Dalvik. Core Libraries. Application framework. Livello applicazioni.
  • 24. Android Code Camp, Urbino — 2012. L’architettura.
  • 25. Android Code Camp, Urbino — 2012. Kernel Linux. Kernel 2.6+. Utilizzato per la gestione dei processi e dei thread, per la gestione a basso livello della memoria, per lo stack di rete, per la sicurezza, per il modello dei driver.
  • 26. Android Code Camp, Urbino — 2012. Librerie native. Librerie C/C++ eseguite sopra al kernel Linux ed utilizzate in diversi ambiti dal sistema Android. Espongono inoltre funzionalità agli sviluppatori tramite l'application framework.
  • 27. Android Code Camp, Urbino — 2012. Runtime Android. Ciò che rende un dispositivo Android diverso da un'implementazione mobile Linux. Tramite l'utilizzo combinato della Dalvik Virtual Machine e delle Core Libraries rende possibile il funzionamento delle applicazioni Android.
  • 28. Android Code Camp, Urbino — 2012. Virtual machine. Implementazione software di una macchina (con un certo Instruction Set Architecture) che esegue programmi come una macchina reale. Virtualization: simulazione di un ambiente in cui Guest ISA e Host ISA sono gli stessi. Emulation: simulazione di un ambiente in cui Guest ISA e Host ISA sono diversi.
  • 29. Android Code Camp, Urbino — 2012. Java virtual machine. Macchina virtuale che esegue programmi scritti in byte-code: rappresentazione intermedia tra il linguaggio macchina e il codice sorgente Java. JVM è una specifica di Oracle (ex Sun). Principali implementazioni: HotSpot – OpenJDK (GPL). HotSpot – OracleJDK.
  • 30. Android Code Camp, Urbino — 2012. Dalvik virtual machine. Macchina virtuale che esegue file .dex (Dalvik Executable). Sorgente Java compilato in file .class e trasformato in formato .dex. Ogni applicazione Android viene eseguita in un processo separato con la propria istanza della Dalvik virtual machine. JIT compiler (versione 2.2).
  • 31. Android Code Camp, Urbino — 2012. Dalvik vs. JVM. Dalvik < JVM. Ma il problema è multidimensionale. • Register-based. • Efficiente con più VMs. • Footprint minimo in memoria. • Startup time ridotto.
  • 32. Android Code Camp, Urbino — 2012. Core libraries. Dalvik non rispetta la specifica J2SE, né quella J2ME. Le core libraries forniscono la maggior parte delle funzionalità disponibili nelle librerie Java standard, così come librerie specifiche per Android.
  • 33. Android Code Camp, Urbino — 2012. Application framework. Fornisce servizi importanti, incapsulati in oggetti Java, alle applicazioni di livello sovrastante. Sono disponibili alla stessa maniera sia per applicazioni di sistema che per applicazioni di terze parti.
  • 34. Android Code Camp, Urbino — 2012. Livello applicazioni. Applicazioni a livello utente scritte in linguaggio Java. App di sistema = App terze parti
  • 35. Android Code Camp, Urbino — 2012. L’ecosistema. Ecosistema di sviluppo. Android SDK. Eclipse IDE. Application Programming Interfaces.
  • 36. Android Code Camp, Urbino — 2012. SDK: emulatore. Software che emula il funzionamento e l‗aspetto di una configurazione hardware virtuale (AVD: Android Virtual Device).
  • 37. Android Code Camp, Urbino — 2012. SDK: emulatore. Interfaccia user-friendly per la configurazione dei propri AVD.
  • 38. Android Code Camp, Urbino — 2012. SDK: tools. Logcat: raccoglie log di un device Android. Lint: analisi statica per ottimizzazione e rilevazione errori comuni. Proguard: riduce la dimensione, ottimizza ed offusca il codice prodotto. Lo rende più rapido e resistente al reverse engineering.
  • 39. Android Code Camp, Urbino — 2012. SDK: Dalvik Debug Monitor Serve Strumento per il debug di dispositivi Android, con raccolta di informazioni su processi, thread, heap, logcat ed emulazione di eventi.
  • 40. Android Code Camp, Urbino — 2012. SDK: Android Developer Tools. Plugin per IDE Eclipse. Semplifica creazione, compilazione e mantenimento di progetti. Integra tool di sviluppo. Include editor grafici e documentazione.
  • 41. Android Code Camp, Urbino — 2012. Eclipse. Ambiente di sviluppo open-source, multi-piattaforma e multi-linguaggio. È la piattaforma di riferimento per Android. Alternative: ANT, NetBeans…
  • 42. Android Code Camp, Urbino — 2012. Android APIs.
  • 43. Android Code Camp, Urbino — 2012. Android 1.5, API 3. Riproduzione e cattura audio/video. Riconoscimento vocale. Widget. Notifiche. WebView.
  • 44. Android Code Camp, Urbino — 2012. Android 1.6, API 4. Gestures. Sintesi vocale. Supporto CDMA. Supporto per dimensioni e densità di schermi variabili.
  • 45. Android Code Camp, Urbino — 2012. Android 2.1, API 7. Supporto Bluetooth 2.1. Live Wallpapers.
  • 46. Android Code Camp, Urbino — 2012. Android 2.2, API 8. JIT compiler. Supporto installazione in SD card. Miglioramento del riconoscimento vocale ed apertura a terze parti. Supporto alla tecnologia Flash.
  • 47. Android Code Camp, Urbino — 2012. Android 2.3, API 9/10. Supporto nativo a Voip (SIP). Supporto a NFC. Garbage Collector concorrente. Supporto ad altri formati multimediali.
  • 48. Android Code Camp, Urbino — 2012. Android 3.0, API 11. Fragments. ActionBar. Nuove API per il drag and drop. Supporto per l'accelerazione hardware 2D. Nuovo framework 3D renderscript. Supporto multimediale migliorato.
  • 49. Android Code Camp, Urbino — 2012. Android 3.1, API 12. Supporto a periferiche USB. Widget ridimensionabili. Supporto multimediale migliorato.
  • 50. Android Code Camp, Urbino — 2012. Android 4.0.1, API 14. Merge tra versione tablet e smartphone. Linux kernel 3.x. UI riprogettata per maggior coerenza ed unificazione. Notifiche più potenti. Supporto per riconoscimento vocale continuo. API sociali. API di basso livello per lo streaming.
  • 51. Android Code Camp, Urbino — 2012. Android 4.1.3, API 16. Project Butter. Notifiche espandibili. Social API migliorate. Riconoscimento vocale avanzato. Sintesi vocale migliorata. Google Now. Abbandono ufficiale della tecnologia Flash.
  • 52. Android Code Camp, Urbino — 2012. Panoramica applicazioni. Elementi principali di un app. Activity. Service. Content provider. Broadcast receiver. Intent. Widget. Fragment. Notification.
  • 53. Android Code Camp, Urbino — 2012. Activity. Ogni activity rappresenta una schermata di un‘applicazione.
  • 54. Android Code Camp, Urbino — 2012. Activity. Ogni activity dovrebbe equivalere ad un'attività atomica dell'utente.
  • 55. Android Code Camp, Urbino — 2012. Activity. Possono avere un valore di ritorno.
  • 56. Android Code Camp, Urbino — 2012. Activity. Poi ci ritorniamo…
  • 57. Android Code Camp, Urbino — 2012. Panoramica applicazioni. Elementi principali di un app. Activity. Service. Content provider. Broadcast receiver. Intent. Widget. Fragment. Notification.
  • 58. Android Code Camp, Urbino — 2012. Service. Un‘attività dell'app o del sistema invisibile all'utente (gira in background). Alcuni esempi: Raccoglie dati del sistema. Aggiorna le informazioni di una particolare app. Scarica nuovi feed RSS da un server.
  • 59. Android Code Camp, Urbino — 2012. Service. Non comunica direttamente con l‘utente ma può comunicare con le activity (anche di altre app) e con il sistema.
  • 60. Android Code Camp, Urbino — 2012. Service. Se fondamentali per un‘applicazione posso essere istanziati come foreground service.
  • 61. Android Code Camp, Urbino — 2012. Panoramica applicazioni. Elementi principali di un app. Activity. Service. Content provider. Broadcast receiver. Intent. Widget. Fragment. Notification.
  • 62. Android Code Camp, Urbino — 2012. Content provider. • È un‘astrazione di insiemi di dati strutturati. • Espone metodi CRUD (create, retrieve, update, and delete). • Usato per condividere dati ad altre applicazioni o per gestirli privatamente. Android ne mette a disposizione molti già pronti e se ne possono implementare di personalizzati.
  • 63. Android Code Camp, Urbino — 2012. Content provider. Alcuni esempi di content provider: • Lista dei contatti. • Lista delle immagini sul dispositivo. • Dati che risiedono in un DB SQLite. • Dati che risiedono su un web service.
  • 64. Android Code Camp, Urbino — 2012. Panoramica applicazioni. Elementi principali di un app. Activity. Service. Content provider. Broadcast receiver. Intent. Widget. Fragment. Notification.
  • 65. Android Code Camp, Urbino — 2012. Broadcast receiver. Sistema per la comunicazione intra-applicazione/intra-processo. Un componente a cui è delegata la ricezione di intent in broadcast…
  • 66. Android Code Camp, Urbino — 2012. Intent. Costituiscono il sistema di messaggistica fra i vari componenti del sistema. Ogni intent è una struttura dati che incapsula dati. Questi dati costituiscono una astrazione di: Un‘operazione da eseguire. Un evento che si è appena verificato.
  • 67. Android Code Camp, Urbino — 2012. Intent. Dati di esempio: Campo Valore Component name it.uniurb.codecamp.test Action ACTION_CALL Data URI tel:07224475 Type integer Category CATEGORY_LAUNCHER Extras "tel_number":int Flags FLAG_ACTIVITY_SINGLE_TOP
  • 68. Android Code Camp, Urbino — 2012. Intent. Inviare un‗immagine: Campo Valore Action SEND Data content://media/external/pic16 Visualizzare un punto su Google Maps: Campo Valore Action VIEW Data geo:latitude,longitude?z=zoom
  • 69. Android Code Camp, Urbino — 2012. Intent. Il mittente è sempre noto mentre il ricevente può non esserlo a priori.
  • 70. Android Code Camp, Urbino — 2012. Intent espliciti. Il nome (la classe) del componente destinatario è specificato. Solo Activity. Solo Activity nel proprio contesto.
  • 71. Android Code Camp, Urbino — 2012. Intent impliciti. Android cerca il componente per noi: Se ne trova uno, lo attiva. Se ne trova più di uno, viene chiesto all‘utente quale scegliere. Se non ne trova nessuno, l'avvio fallisce
  • 72. Android Code Camp, Urbino — 2012. Impliciti intent resolution. In base al tipo del componente. (Activity, Service, Broadcast receiver). In base al campo ACTION. In base al campo CATEGORY. In base al campo DATA (URI e Type).
  • 73. Android Code Camp, Urbino — 2012. Broadcast receiver (reprise). Un componente a cui è delegata la ricezione di intent in broadcast. Può essere/non essere associato ad un altro componente. Non possiede una interfaccia grafica. Può istanziare notifiche. Può avviare un altro componente.
  • 74. Android Code Camp, Urbino — 2012. Broadcast receiver (esempi). Ricezione dei cambiamenti nel livello di carica della batteria del dispositivo. Ricezione dell‘evento download del file completato. Ricezione dell‘evento boot completato e conseguente avvio di un servizio in background.
  • 75. Android Code Camp, Urbino — 2012. Panoramica applicazioni. Elementi principali di un app. Activity. Service. Content provider. Broadcast receiver. Intent. Widget. Fragment. Notification.
  • 76. Android Code Camp, Urbino — 2012. Widget. Inglobati in altre applicazioni. (Risiedono all‘interno di ―App Widget Host‖.) Periodi di aggiornamento lunghi. (Minimo: 30 minuti.) Ricevono input dall‘utente e aggiornamenti tramite un Broadcast Receiver (che devono implementare).
  • 77. Android Code Camp, Urbino — 2012. Esempi di widget.
  • 78. Android Code Camp, Urbino — 2012. Esempi di widget.
  • 79. Android Code Camp, Urbino — 2012. Panoramica applicazioni. Elementi principali di un app. Activity. Service. Content provider. Broadcast receiver. Intent. Widget. Fragment. Notification.
  • 80. Android Code Camp, Urbino — 2012. Fragment. Componenti modulari di un‘activity. Hanno un proprio ciclo di vita. Possono essere rimossi o aggiunti mentre l‘activity è attiva. Nascono come risposta all‘esigenza di mettere un‘activity dentro un‘altra.
  • 81. Android Code Camp, Urbino — 2012. Esempio di fragment. Portrait Landscape
  • 82. Android Code Camp, Urbino — 2012. Panoramica applicazioni. Elementi principali di un app. Activity. Service. Content provider. Broadcast receiver. Intent. Widget. Fragment. Notification.
  • 83. Android Code Camp, Urbino — 2012. Notification. Servono per informare l‘utente di un evento scatenato o avvenuto: Nel sistema. Nell‘activity con cui l‘utente sta interagendo. Nei componenti senza interfaccia. (Come i servizi.)
  • 84. Android Code Camp, Urbino — 2012. Toast notification. Per eventi avvenuti in background. Nessun input dall‘utente. Poco più che un output su console…
  • 85. Android Code Camp, Urbino — 2012. Dialog notification. Per eventi relativi all‘activity corrente. (Caricamento, conferma, etc…) Supportano l‘input utente.
  • 86. Android Code Camp, Urbino — 2012. Status notification. Per eventi relativi avvenuti in background. Richiedono l‘input utente. Sono persistenti. Tipicamente risiedono nella barra delle notifiche finché l‘utente non interagisce cliccandoci o cancellandole. Al click spesso viene lanciata un‘activity.
  • 87. Android Code Camp, Urbino — 2012. Approfondimenti. Altri dettagli sulle applicazioni. Layout. Il back stack di navigazione. Ciclo di vita delle Activity. Ciclo di vita dei Service. Ciclo di vita dei Fragment.
  • 88. Android Code Camp, Urbino — 2012. Layout. Composta genericamente da View e ViewGroup (e Fragment). TableLayout EditText TextView Button
  • 89. Android Code Camp, Urbino — 2012. Layout. Il layout è definito (normalmente) tramite un file xml. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <TextView android:id="@+id/rss_title" android:layout_width="wrap_content" android:layout_height="wrap_content" … /> <ListView android:id="@+id/rss_list" android:layout_width="match_parent" android:layout_height="wrap_content" …> </ListView> <Button android:id="@+id/load" android:layout_width="wrap_content" … /> </RelativeLayout>
  • 90. Android Code Camp, Urbino — 2012. Approfondimenti. Altri dettagli sulle applicazioni. Layout. Il back stack di navigazione. Ciclo di vita delle Activity. Ciclo di vita dei Service. Ciclo di vita dei Fragment.
  • 91. Android Code Camp, Urbino — 2012. Il back stack di navigazione. Ogni activity appartiene ad un task. Ogni task contiene una collezione di activity nell‘ordine in cui sono state lanciate (back stack).
  • 92. Android Code Camp, Urbino — 2012. Il back stack di navigazione. Il sistema gestisce contemporaneamente più task ma solo uno per volta è quello in foreground. Un nuovo task inizia ogni volta che un‘applicazione è avviata dal launcher: <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> oppure con le modalità di lancio.
  • 93. Android Code Camp, Urbino — 2012. Il back stack di navigazione. La struttura di un task viene alterata: • Lanciando una nuova activity (crescita). • Tasto Back (decrescita). Lo stato di un task (back/fore) cambia: • C‘è un‘interruzione per eventi esterni. • Tasto home. • Avvio di un‘activity dal menu delle activity recenti.
  • 94. Android Code Camp, Urbino — 2012. Modalità di lancio. Normalmente: • Quando viene avviata un‘activity per la prima volta questa viene aggiunta al task attuale (oppure ad un task vuoto se MAIN/LAUNCHER). • Anche se la stessa activity era già stata lanciata ne viene creata una nuova istanza.
  • 95. Android Code Camp, Urbino — 2012. Modalità di lancio. Le activity posso essere lanciate con modalità di lancio particolari. Definite nel manifest o nell‘intent di lancio. Modalità Conseguenze Default Viene creata una nuova activity. Istanze diverse della stessa possono appartenere a diversi task. Ogni task può avere più istanze della stessa. SingleTop Viene creata una nuova istanza solo se l‘activity non è al top dello stack (onNewIntent()). Il resto come Default. SingleTask Se c‘è già un‘istanza in un task viene riavviata quella altrimenti viene avviata una nuova activity in un nuovo task. Può esserci sempre solo un‘istanza dell‘activity nel sistema. SingleInstance Come sopra ma l‘activity è sempre l‘unica presente nel suo task.
  • 96. Android Code Camp, Urbino — 2012. Modalità di lancio. DEMO…
  • 97. Android Code Camp, Urbino — 2012. Approfondimenti. Altri dettagli sulle applicazioni. Layout. Il back stack di navigazione. Ciclo di vita delle Activity. Ciclo di vita dei Service. Ciclo di vita dei Fragment.
  • 98. Android Code Camp, Urbino — 2012. Ciclo di vita delle Activity.
  • 99. Android Code Camp, Urbino — 2012. Ciclo di vita delle Activity.
  • 100. Android Code Camp, Urbino — 2012. Ciclo di vita delle Activity.
  • 101. Android Code Camp, Urbino — 2012. Ciclo di vita delle Activity.
  • 102. Android Code Camp, Urbino — 2012. Ciclo di vita delle Activity.
  • 103. Android Code Camp, Urbino — 2012. Ciclo di vita delle Activity. DEMO…
  • 104. Android Code Camp, Urbino — 2012. Ciclo di vita delle Activity. Salvataggio dello stato dell‘activity.
  • 105. Android Code Camp, Urbino — 2012. Ciclo di vita delle Activity. Un‘activity può essere distrutta dal sistema per recuperare memoria MA l‘utente si aspetta di ritrovare l‘activity nello stesso stato. onSaveInstanceState(Bundle) onRestoreInstanceState(Bundle) onCreate(Bundle)
  • 106. Android Code Camp, Urbino — 2012. Ciclo di vita (Esempi). Rotazione dello schermo quando c‘è una ListView caricata con dati remoti. Quando sono chiamati? onRestoreInstanceState() subito dopo onStart(), onSaveInstanceState() prima di onStop() e forse prima di onPause(). Non ci sono garanzie che venga effettivamente chiamato (es: back button)!
  • 107. Android Code Camp, Urbino — 2012. Ciclo di vita (Esempi). Cosa salvare nel Bundle? Lo stato transitorio dell‘activity. Lo stato dell‘interfaccia (lo stato grafico di ogni View viene salvato in ogni caso). Cosa non salvare nel Bundle? Le informazioni non strettamente relative a quell‘istanza dell‘activity. Le info persistenti dovrebbero essere registrate nel metodo onPause().
  • 108. Android Code Camp, Urbino — 2012. Approfondimenti. Altri dettagli sulle applicazioni. Layout. Il back stack di navigazione. Ciclo di vita delle Activity. Ciclo di vita dei Service. Ciclo di vita dei Fragment.
  • 109. Android Code Camp, Urbino — 2012. Started & bound services. Started: Avviato da un altro componente invocando startService(). Viene terminato o termina da solo. Bound: Avviato da 1+ componenti invocando bindService(). Sopravvive fino all‗ultimo unbindService().
  • 110. Android Code Camp, Urbino — 2012. Ciclo di vita dei Service.
  • 111. Android Code Camp, Urbino — 2012. Approfondimenti. Altri dettagli sulle applicazioni. Layout. Il back stack di navigazione. Ciclo di vita delle Activity. Ciclo di vita dei Service. Ciclo di vita dei Fragment.
  • 112. Android Code Camp, Urbino — 2012. Ciclo di vita dei Fragment.
  • 113. Android Code Camp, Urbino — 2012. Un progetto Android. Struttura del progetto in Eclipse. Cartelle. Gestione delle risorse. Manifest dell‗applicazione.
  • 114. Android Code Camp, Urbino — 2012. Cartelle di un progetto Android. /src: sorgenti Java (oppure .aidl o altri) /bin: compilati (.apk, ecc…) /libs: librerie esterne /gen: sorgenti generati (R.java) /assets: risorse unmanaged (nel .apk) /res: risorse managed (processati) /AndroidManifest.xml: metadati .properties, .cfg, .xml: altri files
  • 115. Android Code Camp, Urbino — 2012. Un progetto Android. Struttura del progetto in Eclipse. Cartelle. Gestione delle risorse. Manifest dell‗applicazione.
  • 116. Android Code Camp, Urbino — 2012. Android Asset Packaging Tool. Ad ogni risorsa all‗interno della directory /res viene assegnato un ID intero. Si genera una classe R.java con: Una classe public static final per ogni tipo di risorsa. Un campo intero con il nome risorsa. La classe viene compilata nel namespace. Mappa <nome, ID intero>.
  • 117. Android Code Camp, Urbino — 2012. Versioni delle risorse. Le versioni sono caratterizzate dal nome della directory in cui sono locate. • layout-long • anim-v14 • drawable-en-rUS-land-night-notouch Lingua in inglese, in America, orientato orizzontalmente, è notte e non si dispone di interfaccia touch. Risorsa scelta a runtime dal framework.
  • 118. Android Code Camp, Urbino — 2012. Creazione delle risorse. Dichiarazione tramite XML: <Button android:id=" @+id/nice_button " /> <string name=―hello_world‖> ciao mondo</string> I file vengono creati nelle specifiche sotto-directory di /res.
  • 119. Android Code Camp, Urbino — 2012. Accesso alle risorse. Tramite XML: @[<package_name>:]<resource_type>/<resource_name> <Button android:text=" @string/hello_world " /> Tramite codice: [<package_name>.]R.<resource_type>.<resource_name> ImageView imageView = (ImageView) findViewById(R.id.myimageview); imageView.setImageResource(R.drawable.myimage);
  • 120. Android Code Camp, Urbino — 2012. Un progetto Android. Struttura del progetto in Eclipse. Cartelle. Gestione delle risorse. Manifest dell‗applicazione.
  • 121. Android Code Camp, Urbino — 2012. Manifest dell‘applicazione. File AndroidManifest.xml nella root. Descrive l‗applicazione, il nome del package, il namespace, i permessi. Dichiara che livello di API è richiesto. Include la specifica di ogni componente: Activity, Service, Receiver, etc.
  • 122. Android Code Camp, Urbino — 2012. Tutorial. Hello World in tutte le salse. Preparazione dell‗ambiente di lavoro. Creazione di un progetto. „Hello World― sul log. Layouts, callbacks e toast notifications. Intent e navigazione. Liste. Status notifications. Background service.
  • 123. Android Code Camp, Urbino — 2012. Preparazione dell‘ambiente. Eclipse IDE. Aggiungiamo l‗Android ADT: https://dl-ssl.google.com/android/eclipse/ Dopodiché scarichiamo l‗SDK. …possiamo iniziare!
  • 124. Android Code Camp, Urbino — 2012. Tutorial. Hello World in tutte le salse. Preparazione dell‗ambiente di lavoro. Creazione di un progetto. „Hello World― sul log. Layouts, callbacks e toast notifications. Intent e navigazione. Liste. Status notifications. Background service.
  • 125. Android Code Camp, Urbino — 2012. Creazione di un progetto.
  • 126. Android Code Camp, Urbino — 2012. Tutorial. Hello World in tutte le salse. Preparazione dell‗ambiente di lavoro. Creazione di un progetto. „Hello World― sul log. Layouts, callbacks e toast notifications. Intent e navigazione. Liste. Status notifications. Background service.
  • 127. Android Code Camp, Urbino — 2012. Android log. Classe android.util.Log. Livelli di logging: ASSERT: Log.wtf() ERROR: Log.e() WARN: Log.w() INFO: Log.i() DEBUG: Log.d() VERBOSE: Log.v()
  • 128. Android Code Camp, Urbino — 2012. Per ogni chiamata al logger si passano: TAG: discriminatore. Messaggio: contenuto. Eccezione: opzionale.
  • 129. Android Code Camp, Urbino — 2012. Tutorial. Hello World in tutte le salse. Preparazione dell‗ambiente di lavoro. Creazione di un progetto. „Hello World― sul log. Layouts, callbacks e toast notifications. Intent e navigazione. Liste. Status notifications. Background service.
  • 130. Android Code Camp, Urbino — 2012. Layout. Permettono di strutturare l‗interfaccia grafica di un‗applicazione. Flessibili e dinamici. LinearLayout. RelativeLayout. FrameLayout.
  • 131. Android Code Camp, Urbino — 2012. LinearLayout. <LinearLayout android:layout_width=„match_parent“ android:layout_height=„match_parent“ android:orientation=„horizontal“ > <Item1 /> <Item2 /> <Item3 /> </LinearLayout>
  • 132. Android Code Camp, Urbino — 2012. RelativeLayout. <RelativeLayout> <Item1 /> <Item2 layout_below=„Item1“ layout_alignParentLeft=„true“ /> <Item3 layout_below=„Item1“ layout_alignParentRight=„true“ /> </RelativeLayout>
  • 133. Android Code Camp, Urbino — 2012. Button e callback. <Button android:id=„@+id/buttonToast“ /> Button button = (Button) this.findViewById(R.id.buttonToast); button.setOnClickListener( new OnClickListener(){ @Override public void onClick(View arg0) { } });
  • 134. Android Code Camp, Urbino — 2012. Toast notification. Create tramite metodo statico. Toast.makeText(Context, “Text”, Toast.LENGTH_SHORT).show(); Testo visualizzato in sovraimpressione per la durata specificata.
  • 135. Android Code Camp, Urbino — 2012. Tutorial. Hello World in tutte le salse. Preparazione dell‗ambiente di lavoro. Creazione di un progetto. „Hello World― sul log. Layouts, callbacks e toast notifications. Intent e navigazione. Liste. Status notifications. Background service.
  • 136. Android Code Camp, Urbino — 2012. Intent implicito. Intent i = new Intent( Intent.ACTION_VIEW, Uri.parse("http://www.google.com")); Context.startActivity(i); Si sfrutta l‗intent ACTION_VIEW, definito dal sistema. Viene gestito dal browser (in questo caso).
  • 137. Android Code Camp, Urbino — 2012. Intent esplicito. Intent i = new Intent( Context, Class); Context.startActivity(i); Intent diretto in maniera specifica ad una classe in particolare (una Activity). Non viene intercettata, né risolta dal sistema.
  • 138. Android Code Camp, Urbino — 2012. Tutorial. Hello World in tutte le salse. Preparazione dell‗ambiente di lavoro. Creazione di un progetto. „Hello World― sul log. Layouts, callbacks e toast notifications. Intent e navigazione. Liste. Status notifications. Background service.
  • 139. Android Code Camp, Urbino — 2012. Liste. La lista è visualizzata da una ListView. I dati sono gestiti da un ListAdapter: Gestisce l‗accesso ai dati. Ne determina la rappresentazione.
  • 140. Android Code Camp, Urbino — 2012. Tutorial. Hello World in tutte le salse. Preparazione dell‗ambiente di lavoro. Creazione di un progetto. „Hello World― sul log. Layouts, callbacks e toast notifications. Intent e navigazione. Liste. Status notifications. Background service.
  • 141. Android Code Camp, Urbino — 2012. Componenti di una notifica. Icona (nella barra e nel pannello). Ticker (messaggio nella barra). Numero in sovraimpressione. Flags (AUTO_CANCEL, INSISTENT, etc). Content view (nel pannello), può essere generato (LatestEvent). PendingIntent che determina azione. Identificatore univoco.
  • 142. Android Code Camp, Urbino — 2012. Aggiornamento notifiche. Il pannello mostra una sola notifica per ogni identificatore univoco. Permette di avere una singola notifica per ogni tipologia di avviso dell‗applicazione. I PendingIntent possono essere aggiornati dall‗applicazione (modifica azione, ma non la notifica).
  • 143. Android Code Camp, Urbino — 2012. Tutorial. Hello World in tutte le salse. Preparazione dell‗ambiente di lavoro. Creazione di un progetto. „Hello World― sul log. Layouts, callbacks e toast notifications. Intent e navigazione. Liste. Status notifications. Background service.
  • 144. Android Code Camp, Urbino — 2012. Background service. Si utilizza un Intent per specificare il maniera esplicita il servizio da avviare. Intent serviceIntent = new Intent( Context, Service.class); Context.startService(serviceIntent);

Hinweis der Redaktion

  1. Dati: http://www.idc.com/getdoc.jsp?containerId=prUS23638712