programmazione android - wpage.unina.itwpage.unina.it/m.faella/didattica/gdd/slides/develop4.pdf ·
TRANSCRIPT
Tipi di processi
● Activity: una “schermata” di UI
● Service: un'operazione in background
● ad es., scaricare un file
● Content Provider: un fornitore di dati
● ad es., la rubrica del telefono
● Broadcast Receiver: un osservatore di eventi di sistema
Attività e servizi
● Una attività (activity) alla volta è in primo piano
● le altre sono “sospese”● le attività sono classi che estendono Activity
● I servizi (services) eseguono solo in background
● senza UI
Intenti
● Messaggi finalizzati ad avviare un'applicazione
● Un intento può essere:
● esplicito, se indica il nome dell'attività da avviare
● implicito, se indica solo il tipo di azione da compiere
● Nel secondo caso, l'OS cercherà e lancerà l'applicazione che ritiene più adatta
● Gli intenti sono istanze della classe android.content.Intent
Un intento esplicito
All'interno di una classe che estende Activity,avviamo un'altra activity della stessa applicazione:
Intent intent = new Intent(this, DialogActivity.class);
startActivity(intent);
a questo punto, il chiamante viene sospeso (paused o stopped)
Filtri d’intento
● Le applicazioni dichiarano nel manifest quali intenti impliciti vogliono ricevere, impostando dei filtri d'intento (intent filter)
● I filtri servono a dichiarare che tipo di servizio offre un componente
● I filtri non sono necessari per ricevere intenti espliciti, che sono comunque consegnati al componente (classe) nominato nell'intento
Il filtro MAIN
● Un filtro speciale serve ad indicare che una certa attività è l'entry point di una applicazione
● Tale filtro deve avere azione MAIN e categoria LAUNCHER:
<intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /></intent-filter>
Creare un’attività
Estendere la seguente classe:
public class Activity{ protected void onCreate(Bundle savedInstanceState)
... altri 50 metodi ...}
Il Manifest
● Alla radice di ogni apk deve trovarsi AndroidManifest.xml
● Contiene una serie di dichiarazioni:
● Le activity presenti
● I service presenti
● I permessi richiesti
● Attributi vari
Esempio di Manifest
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.badlogic.androidgames.mrnom" android:versionCode="1" android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="Mr. Nom"> <activity android:name="MrNomGame" android:label="Mr. Nom" android:configChanges="keyboard|keyboardHidden|orientation" android:screenOrientation="portrait"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application>
<uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-sdk android:minSdkVersion="3" android:targetSdkVersion="8"/></manifest>
nome della classe
Android Studio
● versione modificata di IntelliJ
● richiede Java v7 o superiore (ma il linguaggio è 7)
● comprende un emulatore di device
opzionalmente:
● emulatore più sofisticato: Genymotion
Android Studio
● MAC, Windows, Linux
● Componenti:
○ gradle (build manager)
○ SDK manager (versioni di Android)
○ AVD manager (Android Virtual Devices: emulatori)
○ una GUI per creare layout
Installazione
Scaricare e installare Android Studio
Scaricare una o più versioni di Android SDK
nel SDK manager (Tools -> Android)
Creare un Virtual Device
nel AVD manager (Tools -> Android)
scegliere dimensione schermo e versione Android
Configurazione device
1. sul telefono attivare il menu sviluppatori
a. cliccare 7 volte su “Build number/Numero build”, in “Info sul telefono” -> “Informazioni sul
software”
2. sul telefono attivare “USB debugging” dal menu per sviluppatori
3. collegare il telefono in modalità “invio immagini” (PTP) e non “MTP”
in caso di problemi, provare il collegamento con il comando “adb devices”
Android Debug Bridge
Comando “adb”
Alcuni comandi:
adb devices elenco device (reali e virtuali)
adb shell apre una shell sul device
adb logcat elenca il log del device
Struttura di un package
Le applicazioni sono strutturate secondo un sistema di directory fisso:
/ manifest, bytecode, risorse compilate
/res risorse standard
/assets risorse non standard
/lib librerie
/META-INF certificati
Risorse e asset
● Risorse standard (cartella res):● layout per GUI● immagini bitmap● icone
nomi standard, struttura cartelle standard
● Risorse non standard (cartella assets):● effetti sonori● musiche● descrizione dei “livelli” del gioco
Risorse standard
res/ drawable/ aereo.png layout/ main.xml info.xml mipmap/ icon.png values/ strings.xml colors.xml costanti.xml
Risorse standard
res/ drawable/ aereo.png layout/ main.xml info.xml mipmap/ icon.png values/ strings.xml colors.xml costanti.xml
Accedere alle risorse
All’interno di una Activity:
Resources res = this.getResources();
L’oggetto “res” ha metodi per accedere alle risorse tramite un’identificativo
La classe R (generata automaticamente) contiene gli identificativi:
Drawable disegno = res.getDrawable(R.drawable.aereo);
Risorse grafiche (drawable)
Immagini bitmap in formato png, jpg o gif
oppure file xml che puntano ad immagini bitmap
Risorse stringa
res/ drawable/ aereo.png layout/ main.xml info.xml mipmap/ icon.png values/ strings.xml colors.xml costanti.xml
Risorse stringa
Il file string.xml contiene un elenco di stringhe, associate a nomi
Utile per la localizzazione (multi-lingua)
<?xml version="1.0" encoding="utf-8"?><resources> <string name="hello">Hello World!</string> <string name="app_name">AndroidGameFrameWork</string></resources>
In Java:String hello = res.getString(R.string.hello);
In altri file xml:@string/hello
Localizzazione
res/ values/ strings.xml values-es/ strings.xml values-it/ strings.xml
codice ISO del paese
Altre costanti
res/ drawable/ aereo.png layout/ main.xml info.xml mipmap/ icon.png values/ strings.xml colors.xml costanti.xml
Costanti intere
in costanti.xml (il nome del file è arbitrario):
<?xml version="1.0" encoding="utf-8"?><resources> <integer name="max_speed">75</integer> <integer name="min_speed">5</integer></resources>
In Java:
int maxSpeed = res.getInteger(R.integer.max_speed);
Altri tipi di risorse
● dimensioni: in pixel, millimetri, etc.
● array di interi
● array di Drawable
● immagini animate
● layout per GUI
● descrizioni di menu
Accedere agli asset
Accedere all’immagine assets/sfondo.png:
AssetManager assets = myActivity.getAssets();
InputStream in = assets.open(“sfondo.png”);
Bitmap bitmap = BitmapFactory.decodeStream(in);
Nota: è necessario gestire delle eccezioni verificate
Immagini come asset o come risorse?
Bitmap
BitmapDrawableBitmapFactory
Drawable
ResourceManager
res/drawable/aereo.png
InputStream
AssetManager
assets/aereo.png