Android - LUG Perugia

Transcript

Android - LUG Perugia
Programmazione Android
Luca Morettoni <[email protected]>
http://www.morettoni.net
Android Programming

Cos'è Android;

Concetti di base sulla programmazione:


AndroidManifest;

Activities;

Services;

Tanto altro ancora (Providers, Widgets …)
Q&A
Cos'è Android?




Android è una piattaforma FREE;
Android è una piattaforma per lo sviluppo ”mobile”;
Android utilizza il kernel Linux (2.6.x);
Android utilizza Java come piattaforma di programmazione (Dalvik VM)
Cosa NON è Android


Android non è una distribuzione Linux a tutti gli effetti;
Android non usa Java Standard (SE/ME) ma SOLO il linguaggio Java!
Da dove cominciamo?

Installiamo l'SDK (disponibile per Linux, Win, Mac):
http://developer.android.com/sdk

Installiamo l'ADT, plugin per Eclipse (Galileo – 3.5.2) – opzionale ma consigliato!
Concetti di base




AndroidManifest.xml: descrittore dell'app.
ACTIVITIES: rappresentano l'interfaccia utente delle nostre applicazioni;
SERVICES: sono dei veri e propri servizi che girano in background, facendo spesso task lunghi e/o ripetitivi;
PROVIDERS: mettono a disposizione i dati di una app a tutto il sistema.
Concetti di base
(AndroidManifest.xml)

File in cui viene descritta la nostra applicazione:

Quali activities mostrare;

Come rispondere agli ”stimoli esterni”;

Quali risorse utilizzare;

Quali permessi occorrono alla nostra app;

Quale versione di Android utilizzare;

...tanto altro ancora!!!
Concetti di base (Intent)


Gli Intent sono dei messaggi (asincroni) utilizzati per attivare e comunicare con le activities, i service e i broadcast receiver;
L'oggetto ”Intent” definisce una serie di proprietà:

Component – destinatario/URI (opzionale);

Action – azione da compiere/avvenuta;

Extras – dati aggiuntivi (tuple).
Concetti di base
(IntentFilter)


Attraverso gli IntentFilter dichiariamo a quali tipi di Intent siamo interessati (via codice e/o AndroidManifest);
Esempio di IntentFilter per rendere lanciabile la nostra app:
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
Concetti di base
(Broadcast)

Broadcast e BroadcastReceiver: il sistema (e le applicazioni) annunciano l'avvenimento di particolari eventi (chiamate, sms, ecc...) e chi è interessato si registra come receiver.
<receiver android:name=".TerremotoAlarmReceiver">
<intent-filter>
<action android:name="net.morettoni.terremoti.TERREMOTI_ALARM" />
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
Le Activities



Rappresentano la parte ”visibile” delle applicazioni;
Normalmente vengono descritte via XML, ma possono essere realizzate anche via codice;
E' possibile definire più versioni della stessa Activity in funzione dell'hardware (risoluzione, orientamento, ecc...)
Le Activities
res/layout/main.xml
<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/tabhost"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
public class TerremotoActivity extends TabActivity {
<LinearLayout
@Override
android:orientation="vertical"
public void onCreate(Bundle savedInstanceState) {
android:layout_width="fill_parent"
super.onCreate(savedInstanceState);
android:layout_height="fill_parent">
setContentView(R.layout.main);
<TabWidget
...
android:id="@android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ListView
res/
android:id="@+id/terremotiList"
layout-hdpi/
android:layout_width="fill_parent"
layout-ldpi/
android:layout_height="fill_parent" />
layout-mdpi/
</FrameLayout>
drawable-*/
</LinearLayout>
values/
</TabHost>
menu/
Le Activities


Tutte le activities istanziate sul nostro terminale Android vengono impilate in uno stack, quella visibile si trova in cima; quella in fondo è candidata alla distruzione in caso di necessità.
I click dell'utente (o la pressione del tasto back) determina lo spostamento dell'activity corrente sullo stack.
Le Activities

Implementando gli opportuni metodi è possibile:

Gestire il context menu (pressione prolungata);

Gestire il menu (tasto menu);


Memorizzare lo status dell'activity prima che venga (potenzialmente) chiusa.
Alcuni consigli:

I metodi delle Activity devono essere veloci;

Liberate tutte le risorse in caso di chiusura!
Le Activities
I Services

I Services fanno il lavoro (duro) in background:

Calcoli complessi, lunghi e/o ripetitivi;

Download di risorse da Internet;

Lettura dei segnali dai sensori (GPS, ecc...).
public class TerremotoService extends Service {
public void onCreate() {
...
}
public int onStartCommand(Intent intent, int flags, int startId) {
...
}
public void onDestroy() {
...
}
}
startService(new Intent(this, TerremotoService.class));
I Broadcast (receiver)

Quando siamo interessati a particolari eventi basta registrare il nostro BroadcastReceiver e gestire ciò che accade!
public class TerremotoAlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Intent startIntent = new Intent(context, TerremotoService.class);
context.startService(startIntent);
}
}
<receiver android:name=".TerremotoAlarmReceiver">
<intent-filter>
<action android:name="net.morettoni.terremoti.TERREMOTI_ALARM" />
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
Android: tanto altro...

Data storage (SQLite)

Search

OpenGL

Mappe

Widgets

Android Market

Notifiche

Toast
Alcune risorse

http://developer.android.com/

http://groups.google.com/group/android­developers

http://stackoverflow.com/

http://code.google.com/p/terremoto/
?