Les bases de l'AppWidget

 

Il y a une différence entre les widgets au niveau utilisateurs des widgets au niveau des développeurs...

- Les widgets que l'on posent sur le bureau pour un utilisateur se nomme appWidget pour un développeur

- Les boutons, calendrier... pour un utilisateur sont plus généralement nommés des widgets pour un développeur.

 

Les premiers fichiers XML

Tous comme les applications standard, les app widgets seront paramétrées à partir de fichiers XML.

Le tout premier sera évidemment AndroidManifest.xml !

Deux choses seront à définir:

Tout d'abord un receiver (et oui, comme expliqué précédemment, il s'agit d'un broadcast receiver) qui sera placé entre les balises <application> </application>

Les choses importantes à déclarer sont:

- Les filtres d'intentions d'un appWidget. Ici, il s'agit uniquement de l'action APPWIDGET_UPDATE qui sera déclenchée par le système pour maj le widget à l'écran.

- Une ressource XML nommée ici mon_widget_meta qui sera à créer dans res/xml de votre projet (si le répertoire xml n'existe pas, et bien créez le !).

Puis une activité permettant de configurer éventuellement l'appWidget:

Dans la ressource XML mon_widget_meta, nous pourrons trouver:

Les objets widgets doivent définir:

 

Définir le layout

Encore un fichier XML, désolé. Il fonctionne exactement sur le même principe que les layouts des activités d'une application et sera donc stocké sous res/layout.

Cependant, tous les widgets ne pourront pas être utilisés dans un app widget.

Voici une liste (qui devrait évoluer dans le temps) de ce que peut avoir un app widget:

  1. Les layouts
  2. FrameLayout
  3. LinearLayout
  4. RelativeLayout
  5. GridLayout

Les widgets

  1. AdapterViewFlipper
  2. AnalogClock
  3. Button
  4. Chronometer
  5. GridView
  6. ImageButton
  7. ImageView
  8. ListView
  9. ProgressBar
  10. StackView
  11. TextView
  12. ViewFlipper

Les descendants de ces classes ne seront cependant pas supportés.

En fait, seuls ces objets peuvent être maj depuis un autre processus.

 

Exemple de layout:

Image non trouvée !Cette solution très simpliste ne prend pas en compte les marges que Google veut imposer entre les AppWidget. Ce cas étant expliqué dans un autre chapitre. De plus, aucun fond n'est déclaré pour notre AppWidget. La lecture des informations risque donc d'être délicate (dépendra de l'image de l'écran d'accueil).

 

Du code JAVA (enfin !)

Un receiver a été indiqué dans le AndroidManifest.xml, il faut donc le coder !

Il devra se nommer fr.free.supertos.MonWidget (puisque c'est ce nom que nous lui avons donné !):

Bon, il n'y a pas grand choix dans la codification, tout vous sera imposé:

Une méthode onUpdate qui est envoyée à la class MonWidget lors de l'envoi d'un intent avec l’action APPWIDGET_UPDATE et qui permettra de mettre à jour toutes les instances de votre app widget posées sur l'écran d'accueil (d'où la boucle for). Puis une méthode updateAppWidget qui doit travailler sur une view d'une instance qui n'est pas dans le processus de l'application. D'où l'utilisation de la classe RemoteViews pour pouvoir tout de même intervenir dessus.

Vous noterez que j'ai mis en commentaire du code, celui-ci permet d'intervenir directement sur un widget TextView pour modifier le texte. Juste pour montrer que cela est possible...

Puis une activité de configuration. Elle sera lancée lorsque l'utilisateur choisira votre app widget pour le poser sur l'écran:

Là aussi, un squelette de code va s'imposer:

Lors de la création de notre widget, l'activité de configuration est lancée et informe le gestionnaire de app widget qu'elle est ok pour travailler et indique son ID récupéré depuis sa propre intention.

Il n'y a plus qu'à lancer le tout !

 

Suite...

Vous avez vu les bases. Reste à approndir tout cela maintenant !