Le slide che abbiamo visto durante l'Android Code Camp 2012 che si è tenuto ad Urbino, presso la sede del corso di laurea in "Informatica Applicata", dell'Università degli Studi di Urbino "Carlo Bo".
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.
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‖.
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…?
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.”
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.
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
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…
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.
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).
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…
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
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.
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.
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().
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.
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.
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.
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.
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.
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);