5. Il punto di vista dello sviluppatore
Package android.widget
Contiene le view utilizzabili nelle interfacce
Package android.appwidget
Contiene le classi per gestire gli widget nella home
8. Pro e contro
Conviene aggiungere uno widget?
Si!
interazione facilitata con l’app
funzionalità sempre a portata di mano
categoria widget sul market
No!
impossibile spostare l’app sulla sd card
12. Attributi disponibili
Calcolo della dimensione
(numero di celle * 74) - 2
updatePeriodMillis
millisecondi fra due aggiornamenti
initialLayout
layout iniziale widget
può essere diverso dal layout definitivo
18. Android non è solo touch
Device con trackball
Gli utenti blackberry sono abituati a usarla
Device con tastiera
Possono contenere i tasti freccia
Google TV
non avrà un telecomando touch
25. RemoteViews
E’ una lista di comandi da effettuare
I comandi vengono eseguiti in un altro processo
Metodi con 3 parametri
id di una view contenuta nel layout
setter da richiamare
valore da impostare
Esempi di metodi
setInt(int viewId, String methodName, int value)
setString(int viewId, String methodName, String value)
26. PendingIntent
Intent da passare a una app esterna
Creati con un metodo statico
getActivity(Context context, int requestCode, Intent intent, int flags)
getBroadcast(Context context, int requestCode, Intent intent, int
flags)
getService(Context context, int requestCode, Intent intent, int flags)
Attenzione alla cache!
requestCode: private request code for the sender (currently not
used).
27. PendingIntent
public static Intent createIntent(Context ctx, int pos) {
Intent intent = new Intent(ctx, PictureViewer.class);
intent.putExtra(PictureViewer.IMAGE, "img" + pos);
return intent;
}
public static PendingIntent createPendingIntent(
Context ctx, int pos) {
Intent intent = createIntent(ctx, pos);
return PendingIntent.getActivity(ctx, pos, intent, 0);
}
29. Activity di configurazione
Può essere configurata nel file xml
Utile quando il widget è configurabile
Alla fine aggiorna manualmente il widget
Aggiungiamo una configurazione al nostro
esempio:
checkbox per nascondere lo sfondo del widget
37. Home in landscape
Alcune home non hanno orientation fissa
A differenza delle Activity non è possibile decidere l’orientation
I tablet sono in landscape
Device con tastiera
Occorre gestire i layout
directory layout-landscape
38. Immagini esterne
E se prendiamo le immagini dalla scheda
sd o dagli asset?
Se le immagini sono troppo grandi:
Errore di memoria nella RemoteViews! :(
39. Uri per ContentProvider
views.setImageViewUri(R.id.img1, createUri("img1"));
views.setImageViewUri(R.id.img2, createUri("img2"));
views.setImageViewUri(R.id.img3, createUri("img3"));
views.setImageViewUri(R.id.img4, createUri("img4"));
private static Uri createUri(String imageName) {
return Uri.parse(
"content://org.whymca.appwidget.pictures/" +
imageName);
}
41. Timeout aggiornamento
onUpdate viene eseguito nel thread
principale
possibili timeout
al riavvio del device ci sono molte app in esecuzione
pratica da seguire: spostare la logica in un
service esterno
42. Service
public void onUpdate(Context context,
AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
Intent intent = new Intent(context,
PicturesAppWidgetService.class);
intent.putExtra("appWidgetIds", appWidgetIds);
context.startService(intent);
}
43. updatePeriodMillis
Poco flessibile
tutti gli widget sono aggiornati insieme e con la stessa frequenza
Configurazione fissa
è cablato in un xml
Minimo 30 minuti
anche se nel file xml viene specificato un valore minore
Attivato anche con il telefono in stand by
consumo eccessivo della batteria
44. AlarmManager
creare un nuovo alarm in onUpdate
BroadcastReceiver definito nel manifest
un alarm per ogni widget
ogni widget viene aggiornato con frequenza diversa
alarm non eseguito con telefono in stand by
cancellare l’alarm in onDeleted
45. Widget scrollable
Forum
http://groups.google.com/group/android-appwidget-extensions
Esempio di utilizzo
http://code.google.com/p/scrollablecontacts/
46. Widget scrollable
Vantaggi
permettono di usare liste e griglie
resize migliore
Difetti
funzionano solo con home replacement (ADW, LauncherPro,
GoLauncher, Home++, ...)
su LauncherPro devono essere abilitati manualmente
lag dovuto a un bug (o feature!) di android
http://code.google.com/p/android/issues/detail?id=4536
57. Il futuro
“Nuova” feature su Android 3.1
resize degli widget
Tablet / Google TV
su schermi grandi hanno più spazio nella home
molto simile a un sistema operativo desktop