Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Corso Di Programmazione Per ANDROID PDF
Corso Di Programmazione Per ANDROID PDF
programmazione
per android
Copyright Daniele Valduga
1
hotless.altervista.org
Introduzione
(corso completo per imparare
a programmare con il S.O. Google)
hotless.altervista.org
hotless.altervista.org
Prima parte
(ambiente di sviluppo)
hotless.altervista.org
hotless.altervista.org
hotless.altervista.org
hotless.altervista.org
hotless.altervista.org
hotless.altervista.org
10
hotless.altervista.org
hotless.altervista.org
12
hotless.altervista.org
Seconda parte
(Primi passi)
Le variabili
In qualsiasi linguaggio di
programmazione necessario un
dispositivo di memorizzazione, vale a
dire qualcosa che possa ricordare i valori
e le propriet degli oggetti o altri dati
significativi.
Questo tipo di dispositivo di memoria
definito variabile.
In Java le variabili sono definite da un
nome e da un tipo di dato.
Ad esempio, int x indica una variabile
di nome x e di tipo intero.
Ci sono otto tipi di base per i dati in java
13
hotless.altervista.org
Tipo
Descrizione
-----------------------------------------------------byte
intero con segno a 8 bit
short
intero con segno a 16 bit
int
intero con segno a 32 bit
long
intero con segno a 64 bit
float
numero con virgola mobile
double
numero con virgola mobile
con doppia precisione
char
carattere singolo unicode
boolean
true o false
hotless.altervista.org
ATTENZIONE!
Java un linguaggio Case Sensitive, la
variabile miaVariabile diversa da
MIAVARIABILE o da MIAvariabile.
La notazione a cammello ti aiuter ad
15
hotless.altervista.org
hotless.altervista.org
sottostante.
Operatore
Funzione
---------------------------------------------------+
somma
sottrazione
*
moltiplicazione
/
divisione
%
modulo
++
incremento
-decremento
hotless.altervista.org
hotless.altervista.org
Incremento e decremento
Gli operatori di incremento e
decremento sono usati per aumentare o
diminuire il valore di una variabile di un
punto,abbreviando l'operazione.
Esempio:
x + 1 = x ++
x -1= x-19
hotless.altervista.org
Il tipo char
Il tipo char non un tipo numerico:
rappresenta un carattere unicode come
una lettera.
Quando si inizializza una variabile di
questo tipo, il valore va messo tra apici
.., oltre a lettere e numeri un char pu
anche rappresentare caratteri speciali
come _ , % , / o altri.
Anche su questo tipo di variabili si
posso eseguire alcune operazioni
matematiche.
possibile ad esempio incrementare o
decrementare un carattere di una certa
cifra.
Esempio:
char carattere = 'a';
carattere = carattere + 5;
carattere = carattere ;
20
il carattere sar a
il carattere sar f
il carattere sar e
hotless.altervista.org
Il tipo boolean
Un tipo di base particolare il
boolean che pu assumere solo due
valori: true o false.
Ovviamente boolean pu anche essere
il risultato di una condizione.
Nella forma piu semplice, una
condizione espressa come valore
operatore valore (ad esempio x < 10
restituira true nel caso in cui x sia
minore di 10 e false altrimenti).
Per unire pi condizioni si utilizzano i
connettivi logici AND (in Java indicato
con &&), OR (indicato con ||) e NOT
(indicato con !).
21
hotless.altervista.org
Operatore
Significato
-------------------------------------------------------<
minore
<=
minore o uguale
>
maggiore
>=
maggiore o uguale
==
uguale
!=
diverso da
Esempio:
x
x
x
!
=
<
<
(x
10;
11 && x < 9; false
11 || x < 9;
true
< 11);
false
hotless.altervista.org
hotless.altervista.org
hotless.altervista.org
Esempio:
if ( x = = 1 ){
testo = giovanni;
} else if ( x = = 2 ){
testo = luca;
} else {
testo = nessuno;
};
switch
In Java esiste anche un ulteriore
costrutto condizionale, lo switch, la sua
sintassi molto semplice:
switch ( scelta ) {
case 1: istruzioni 1; break;
case 2: istruzioni 2; break;
case 3: istruzioni 3; break;
25
hotless.altervista.org
hotless.altervista.org
Terza parte
(Passiamo alla pratica)
27
hotless.altervista.org
Project name:
CiaoMondoAndroid
Build target:
Android 1.5.
Application name: Ciao Mondo
Package name:
it.primoprogetto.ciaoandroid
CreateActivity: CiaoMondoAndroidActivity
28
hotless.altervista.org
29
hotless.altervista.org
hotless.altervista.org
31
hotless.altervista.org
Struttura di un progetto
Come puoi notare, nel tuo Package
Explorer ora visibile il progetto
CiaoMondoAndroid che hai appena
creato.
Fai un doppio clic per espanderlo e
noterai una serie di files e cartelle che
sono state autogenerate.
hotless.altervista.org
hotless.altervista.org
34
hotless.altervista.org
Quarta parte
(Classi e oggetti)
La programmazione orientata
agli oggetti
Quando si usa la programmazione a
oggetti, un programma composto da
oggetti (ciascuno di essi con le sue
propriet) e da funzioni che questi oggetti
possono svolgere.
Gli oggetti che compongono un
programma possono essere realizzati dal
programmatore o da altri che li rendono
disponibili, gratuitamente o meno.
Ogni oggetto formato da altri oggetti
35
hotless.altervista.org
Classi e oggetti
Per definire le propriet ed il
comportamento di un oggetto si utilizzano
le classi.
Una classe il modello di un oggetto,
stabilisce come loggetto fatto e cosa
pu fare, ma non un oggetto.
Un oggetto unistanza di una classe.
Nellapplicazione che si realizzera
successivamente verra creata la classe
Contatto con determinate caratteristiche
ma, seppur sia possibile avere diversi
oggetti Contatto, con nome, cognome e
numero di telefono diversi tra loro, la
36
hotless.altervista.org
Variabili di istanza
Le variabili che definiscono una classe
37
hotless.altervista.org
hotless.altervista.org
I metodi
I metodi definiscono il comportamento
di una classe.
La sintassi per definire un metodo :
visibilit tipoDiRitorno nomeMetodo (argomento1, argomento2,...){
istruzioni;
};
hotless.altervista.org
Attenzione
Una classe non pu avere due metodi
uguali!
Metodi mutuatori e accessori
I metodi che modificano le variabili di
istanza sono detti mutuatori.
Esempio:
void setNomeVariabile (tipoVariabile nuovaVariabile){
nomeVariabile = nuovaVariabile;
};
40
hotless.altervista.org
hotless.altervista.org
hotless.altervista.org
Metodi costruttori
Ogni classe deve avere un metodo
costruttore: se non se ne definisce uno,
gliene viene assegnato uno di default.
Il compito di questo metodo, quello di
allocare lo spazio in memoria per
loggetto e assegnare
43
hotless.altervista.org
hotless.altervista.org
hotless.altervista.org
I metodi statici
In java esiste una parola chiave,
static, che definisce variabili e metodi
di classe e non di istanza, mentre una
variabile di istanza una caratteristica
comune a tutti gli oggetti istanza di una
46
hotless.altervista.org
47
hotless.altervista.org
double x = 16;
double radice = Math.sqrt(x);
Gli argomenti
Se un metodo non riceve un argomento,
agisce sempre nello stesso modo.
Sfruttando gli argomenti, si pu rendere
un metodo dinamico e fargli eseguire
operazioni diverse.
Ad esempio, se uno dei parametri
boolean, il metodo esegue alcune
operazioni in base al valore di questo
48
hotless.altervista.org
parametro.
Passaggio di parametri
Esistono due modi per passare parametri
a un metodo, per valore o per riferimento.
Esempio per valore
int x = 5;
x++;
incrementa(x);
x vale 5
x vale 6
viene chiamato il metodo
'incrementa' sul valore di x = 6
public void incrementa (int i) { Lintero i contiene una
copia del valore di x che
vale 6, ma dopo
listruzione i++ il valore
di i diventa 7 ma quello
di x rimane 6
i++;
};
hotless.altervista.org
50
hotless.altervista.org
Le classi wrapper
Esistono classi particolari, che offrono,
tra le altre cose, un modo per passare per
riferimento anche i tipi di base, queste
classi sono dette wrapper e sono
Integer, Double, Float, Long, Short,
Byte, Character e Boolean, il loro
utilizzo molto semplice.
Esempio:
Integer i = new Integer(5);
incrementa(i);
public void incrementa(Integer intero) {
intero++;
};
hotless.altervista.org
I mattoni fondamentali
Android dispone dei suoi mattoni
fondamentali che lo sviluppatore pu
estendere e implementare per trovare un
punto di aggancio con la piattaforma.
Android fornisce quattro
mattoni di base:
Attivit
Le attivit sono quei blocchi di
unapplicazione che interagiscono con
lutente utilizzando lo schermo e i
dispositivi di input.
Comunemente fanno uso di componenti
UI gi pronti, come quelli presenti nel
pacchetto android.widget, anche se
52
hotless.altervista.org
Servizio
Un servizio gira in background e non
interagisce direttamente con lutente.
Ad esempio pu riprodurre un brano
MP3 mentre lutente utilizza delle attivit
per fare altro.
Un servizio si realizza estendendo la
classe android.app.Service.
53
hotless.altervista.org
Broadcast Receiver
Un Broadcast Receiver viene
utilizzato quando si intende intercettare
un evento.
Ad esempio lo si pu utilizzare se si
desidera compiere unazione quando si
scatta una foto o quando parte la
segnalazione di batteria scarica.
La classe da estendere
android.content.BroadcastReceiver.
Content Provider
I Content Provider sono utilizzati
per esporre dati ed informazioni.
Costituiscono un canale di comunicazione
54
hotless.altervista.org
55
hotless.altervista.org
Quinta parte
(pubblicare apk)
I PACCHETTI APK
Le applicazioni Android sono distribuite
sotto forma di file APK.
All'interno di questi file vengono
raccolti gli eseguibili in formato DEX,
le eventuali risorse associate e una serie
di descrittori che delineano il contenuto
del pacchetto.
In particolare, nel cosiddetto
manifesto, vengono dichiarate le
attivit, i servizi, i provider e i receiver
compresi nel pacchetto, in modo che il
sistema possa agganciarli e azionarli
56
hotless.altervista.org
correttamente.
Torniamo, in Eclipse, sul progetto
CiaoMondoAndroid.
Al suo interno troverete un file chiamato
AndroidManifest.xml, con i seguenti
dati al suo interno:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://
schemas.android.com/apk/res/android"
package="it.primoprogetto.ciaoandroid"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" an
droid:label="@string/app_name">
<activity android:name=".CiaoMondoAndroi
dActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.
action.MAIN" />
hotless.altervista.org
58
hotless.altervista.org
hotless.altervista.org
hotless.altervista.org
61
hotless.altervista.org
62
hotless.altervista.org
hotless.altervista.org
generato.
Scegliete la destinazione e concludete
loperazione.
fatta, il pacchetto stato generato e
firmato.
Potete ora installarlo su un dispositivo
Android!.
64
hotless.altervista.org
Sesta parte
(Le risorse esterne)
hotless.altervista.org
hotless.altervista.org
<string name="nome">Android</string>
</resources>
hotless.altervista.org
hotless.altervista.org
RICHIAMARE LE RISORSE
DA XML
Ogni tanto, ti potr capitare di trovare
del codice sorgente in Java, C o in altri
linguaggi, con valori e messaggi digitati
direttamente dentro il codice.
Questo modo di programmare, non
corretto, sempre meglio separare i dati
dal codice, perch in questo modo il
software pi facile, sia da realizzare
sia da mantenere.
Android favorisce la pratica la
programmazione in tal senso.
I valori dichiarati nei file XML sotto
69
hotless.altervista.org
hotless.altervista.org
"http://schemas.android.com/apk/res/andr
oid"
package="mypackage"
android:versionCode="1"
android:versionName="1.0">
<application
android:label="LaMiaPrimaApplicazione">
...
</application>
</manifest>
Il nome dellapplicazione,
LaMiaPrimaApplicazione, in questo
caso, viene digitato direttamente
dentro il codice XML.
Con Android questo corretto, tuttavia
si pu fare di meglio.
Si pu, ad esempio, includere il titolo
dellapplicazione nel file
res/values/strings.xml, in questo
modo:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string
71
hotless.altervista.org
name="app_name">LaMiaPrimaApplicazio
ne</string>
</resources>
hotless.altervista.org
73
hotless.altervista.org
hotless.altervista.org
licona allapplicazione:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android=
"http://schemas.android.com/apk/res/andr
oid"
package="mypackage"
android:versionCode="1"
android:versionName="1.0">
<application
android:label="@string/app_name"
android:icon="@drawable/icon">
...
</application>
</manifest>
75
hotless.altervista.org
Settima parte
(Interfacce)
VIEW E VIEWGROUP
I primi due concetti da imparare sono:
View e ViewGroup, e corrispondono
al metodo con cui Android classifica e
organizza ci che presente sullo
schermo.
I bottoni, i campi di testo, le icone e
tutto ci che concerne linterfaccia
grafica, sono oggetti View.
I ViewGroup, invece, sono dei
contenitori che possono mettere assieme
pi oggetti View.
I ViewGroup, inoltre, sono a loro
76
hotless.altervista.org
hotless.altervista.org
hotless.altervista.org
hotless.altervista.org
hotless.altervista.org
hotless.altervista.org
ViewGroup.LayoutParams params)
Mostra sullo schermo loggetto View
specificato, applicando una serie di
parametri di visualizzazione ed
organizzazione del componente
(params).
WIDGET
Con il termine widget si indicano
quei componenti di base per linterazione
con lutente, come i bottoni, le check box,
i campi di testo, le liste e cos via.
I widget predefiniti di Android
estendono tutti la classe View e sono
conservati nel package
android.widget.
82
hotless.altervista.org
ANDROID.WIDGET.EDITTEXT
Estende TextView e permette
allutente di modificare il testo mostrato.
Il testo digitato pu essere recuperato
83
hotless.altervista.org
ANDROID.WIDGET.BUTTON
Realizza un bottone che lutente pu
cliccare.
Il componente espande TextView, e
per questo possibile impostare il testo
mostrato al suo interno con il metodo
setText(), sia con parametro stringa sia
con riferimento a risorsa del
84
hotless.altervista.org
gruppo R.string.
ANDROID.WIDGET.IMAGEVIEW
Un componente che permette di
mostrare unimmagine.
Metodi utili sono:
setImage Bitmap(), che accetta un
oggetto di tipo android.graphics.Bitmap
setImageDrawable(), che accetta un
argomento
85
hotless.altervista.org
android.graphics.drawable.Drawable
setImage
Resource(), che accetta un riferimento
a risorsa drawable.
ANDROID.WIDGET.IMAGEBUTTO
N
Un bottone con unimmagine.
Estende ImageView, e quindi espone
86
hotless.altervista.org
ANDROID.WIDGET.CHECKBOX
Questo componente realizza una casella
di spunta (check box, appunto).
Estende Button e TextView,
pertanto il testo a fianco della casella pu
essere impostato con i metodi setText().
87
hotless.altervista.org
ANDROID.WIDGET.RADIOBUTTON
Questo componente realizza un bottone
radio.
Come nel caso di CheckBox, le classi
base Button e TextView forniscono i
metodi necessari per limpostazione del
testo visualizzato.
Un bottone radio, da solo, non ha senso.
Due o pi bottoni radio, quindi, possono
essere raggruppati allinterno di un
android.widget.RadioGroup.
Lutente, cos, potr attivare soltanto
una delle opzioni del gruppo.
88
hotless.altervista.org
ANDROID.WIDGET.TOGGLEBUTT
ON
Un bottone ad interruttore, che pu
essere cio on o off.
Pu essere usato per far attivare o
disattivare delle opzioni.
89
hotless.altervista.org
ANDROID.WIDGET.DATEPICKER
Un componente che permette di
scegliere una data selezionando giorno,
mese ed anno.
La data impostata pu essere recuperata
servendosi dei metodi:
getDayOfMonth(), getMonth() e
getYear().
90
hotless.altervista.org
ANDROID.WIDGET.TIMEPICKER
Un componente che permette di
scegliere un orario selezionando ora e
minuto.
Lorario impostato dallutente pu
essere recuperato servendosi dei metodi
getCurrentHour() e
getCurrentMinute().
ANDROID.WIDGET.ANALOGCLOC
K
Un componente che mostra allutente un
91
hotless.altervista.org
orologio analogico.
ANDROID.WIDGET.DIGITALCLOC
K
Un componente che mostra allutente un
orologio digitale.
92
hotless.altervista.org
hotless.altervista.org
LAYOUT
Con il termine layout, si identificano
tutti quei ViewGroup utilizzabili per
posizionare i widget sullo schermo.
Android fornisce una serie di
layout predefiniti.
Esaminiamone alcuni:
android.widget.FrameLayout
Il pi semplice e basilare dei layout,
94
hotless.altervista.org
95
hotless.altervista.org
android.widget.RelativeLayout
Come FrameLayout, vuole un solo
componente al suo interno ma, a
differenza di questultimo, mantiene le
dimensioni reali dell'oggetto, senza
allargarlo.
96
hotless.altervista.org
hotless.altervista.org
Gravity.CENTER_VERTICAL
allinea il widget al centro verticalmente.
Gravity.CENTER allinea il widget al
centro sia orizzontalmente sia
verticalmente.
Pi costanti Gravity, purch non in
contrasto fra di loro, possono essere
concatenate in un solo valore servendosi
delloperatore binario OR (che
in Java si rende con il simbolo | ).
Ad esempio, per allineare in basso a
destra si scrive:
Gravity.BOTTOM | Gravity.RIGHT
98
hotless.altervista.org
ANDROID.WIDGET.LINEARLAYOU
T
Un layout utile per disporre pi
componenti uno di seguito allaltro, sia
orizzontalmente sia verticalmente.
Una volta creato il layout, il suo
orientamento pu essere stabilito
chiamando il metodo setOrientation(),
con argomento pari a
LinearLayout.HORIZONTAL o
LinearLayout.VERTICAL.
Con lorientamento orizzontale i
componenti verranno messi tutti sulla
stessa riga, uno dopo laltro.
Con lallineamento verticale, invece,
si procede lungo una colonna, e quindi i
widget saranno uno sopra laltro.
Esaminiamo il caso dellallineamento
orizzontale, in questo caso i componenti
vengono introdotti lungo una sola linea.
Il sistema accetta di aggiungere
99
hotless.altervista.org
hotless.altervista.org
layout.setGravity(Gravity.CENTER_HORIZONTAL);
layout.addView(button1);
layout.addView(button2);
layout.addView(button3);
setContentView(layout);
hotless.altervista.org
La classe
android.widget.RadioGroup,
presentata sopra, utile per mettere
insieme pi RadioButton, estende
LinearLayout e gode quindi di tutte le
propriet appena mostrate.
ANDROID.WIDGET.TABLELAYOUT
Un layout che permette di sistemare i
102
hotless.altervista.org
hotless.altervista.org
104
hotless.altervista.org
105
hotless.altervista.org
ATTENZIONE
La numerazione delle colonne parte da 0.
TableLayout dispone inoltre di alcuni
metodi di comodo che permettono, in un
sol colpo, di applicare le medesime
impostazioni di shrink o di stretch a
tutte le colonne.
Questi metodi sono:
setShrinkAllColumns() e
setStretchAllColumns().
106
hotless.altervista.org
Ottava parte
(I men)
I MENU IN ANDROID
In Android esistono tre differenti tipi di
menu:
Options menu
Sono i menu concepiti per raggruppare
le opzioni ed i comandi di
unapplicazione.
Si dividono in due sotto-gruppi, icon
menu ed expanded menu, descritti di
seguito.
Icon menu
Sono i menu con le opzioni principali di
107
hotless.altervista.org
unapplicazione.
Vengono visualizzati nella parte bassa
dello schermo quando si schiaccia il tasto
menu del dispositivo.
Vengono chiamati icon menu perch gli
elementi contenuti al loro interno, in
genere, sono delle grosse icone che
lutente pu selezionare con il
polpastrello.
Costituiscono il menu principale di ogni
attivit e dovrebbero contenere sempre e
solo le opzioni pi importanti.
Questi menu sono di rapido accesso, ma
soffrono per questo di alcune limitazioni:
possono contenere al massimo sei
elementi, e non possibile inserire negli
icon menu elementi avanzati come le
checkbox e i radio button.
108
hotless.altervista.org
Expanded menu
Quando il primo tipo di menu non
sufficiente per esporre tutti i comandi e
109
hotless.altervista.org
110
hotless.altervista.org
Context menu
I menu contestuali sono quelli che
appaiono quando si mantiene il tocco per
qualche istante su un widget che ne
dotato.
Ad esempio nel browser possibile
eseguire un tocco di questo tipo sopra ad
unimmagine.
Dopo qualche istante verr aperto un
menu contestuale con alcune opzioni
relative alla pagina corrente e
allimmagine selezionata, come ad
esempio i comandi per salvarla in locale e
condividerla con gli amici.
Come nel caso precedente, questo
genere di menu si presenta come una lista
a tutto schermo, che pu contenere
numerose opzioni.
111
hotless.altervista.org
112
hotless.altervista.org
Nona parte
(Un altro po di pratica)
WALLPAPER CHANGER
Sfruttiamo le conoscenze acquisite per
realizzare unapplicazione un po meno
didattica ed un po pi concreta:
un wallpaper changer automatico,
cio unapplicazione che ogni tanto (ad
esempio ogni minuto) cambi
automaticamente limmagine di sfondo
del telefono.
Per cominciare, create nel vostro
ambiente di sviluppo il progetto
WallpaperChanger.
Il package di riferimento su cui
113
hotless.altervista.org
lavoreremo :
it.Secondoprogramma.wallpaperchanger.
Le immagini che, a rotazione, verranno
impostate come wallpaper, saranno parte
del software stesso.
Preparate quindi una serie di immagini
JPEG di dimensione idonea, ed
aggiungetele poi al percorso di progetto
assets/wallpapers.
Potete dare alle immagini il nome
che preferite.
Il cuore dellapplicazione, naturalmente,
un servizio:
package
it.Secondoprogramma.wallpaperchanger;
...
public class WallpaperChangerService extends
Service {
public static boolean STARTED = false;
private String[] availableWallpapers;
private int currentWallpaperIndex;
private Timer timer;
...
114
hotless.altervista.org
hotless.altervista.org
hotless.altervista.org
layout/main.xml:
<?xml version=1.0 encoding=utf-8?>
<LinearLayout
xmlns:android=http://schemas.android.
com/apk/res/android
android:orientation=vertical
android:layout_width=fill_parent
android:layout_height=fill_parent>
117
hotless.altervista.org
package
it.Secondoprogramma.wallpaperchanger;
...
public class WallpaperChangerActivity extends
Activity
{
private Button bStartService;
private Button bStopService;
private Button bFinish;
@Override
public void onCreate(Bundle
savedInstanceState) {
118
hotless.altervista.org
hotless.altervista.org
120
hotless.altervista.org
INDICE
AMBIENTE DI SVILUPPO
PRIMI PASSI
PASSIAMO ALLA PRATICA
CLASSI E OGGETTI
PUBBLICARE APK
LE RISORSE ESTERNE
INTERFACCE
I MENU
UN ALTRO PO DI PRATICA
121
4
13
27
35
56
65
76
107
113
hotless.altervista.org
122
hotless.altervista.org