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/androiddevelopers http://stackoverflow.com/ http://code.google.com/p/terremoto/ ?