Android et les AppWidgets

Introduction aux AppWidgets sous Android

Un AppWidget est une application dont on peut afficher les données directement sur le « bureau » de votre terminal android. Ces AppWidgets sont, la plupart du temps, appelés par les utilisateurs d’Android des Widgets. Nous utiliserons ici le terme d’AppWidget pour ne pas les confondre avec les widgets utilisés par les développeurs dans les Activities.

La création d’AppWidget est disponible depuis la version 1.5 d’Android grâce à l’API AppWidget.

Chaque AppWidget est un BroadcastReceiver couplé avec un fichier XML de metadata qui définit les informations spécifiques de l’AppWidget. Vous pouvez aussi facilement rajouter un AppWidget à une application que vous avez déjà créée.Voici les différentes méthodes que nous pourrons surcharger dans la classe AppWidget :

  • onEnabled() : méthode appelée lorsque notre AppWidget est créé. L’initialisation du Widget et de ses données sont réalisés ici de manière généraleAppelez quand votre Widget est créé.
  • onDisabled() : méthode appelée juste avant que l’AppWidget soit supprimé.
  • onUpdates() : méthode appelée lorsque l’AppWidget doit réaliser une mise à jour de son interface graphique.
  • onDeleted() : méthode appelée lorsque l’AppWidget est supprimé (après la méthode onDisabled())
  • onReceive() : par défaut, récupère un événement et appelle la méthode correspondante.

Voyons maintenant comment créer notre propre AppWidget Android.

Création d’un AppWidget Android

Nous allons créer un AppWidget qui va nous permettre d’écrire du texte sur le « bureau » de notre terminal. Il s’agit d’un AppWidget extrêmement simple mais qui nous permettra de nous familiariser avec ce nouveau concept.

Création du layout

Tout d’abord, nous allons créer le Layout de notre AppWidget. Pour cela, éditez le fichier res/layout/main.xml :

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:background="#000"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/hello_world_widget"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginTop="5dip"
        android:padding="10dip"
        android:text="@string/hello_world_widget"
        android:textColor="#FFF" />

</LinearLayout>

Nous avons dit précédemment que nous allions créer un AppWidget qui affichera du texte sur notre « bureau ». Nous utiliserons donc une View de type TextView que nous placerons dans un LinearLayout.

Mise à jour des ressources de type string

Nous voyons alors que nous avons utilisé un string « hello_world_widget » dans ce fichier mais cependant, ils n’existe pas encore. Il nous faudra alors le créer. Pour cela, nous éditerons le fichier res/values/strings.xml de la manière suivante :

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">My Hello World Widget</string>
    <string name="hello_world_widget">Bienvenue dans mon Widget Hello World :)  </string>

</resources>

Configuration de l’AppWidget

Nous allons maintenant configurer notre widget en créant un répertoire xml dans le répertoire res. Puis nous créerons le fichier res/xml/my_widget_provider.xml :

<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
    android:initialLayout="@layout/main"
    android:minHeight="80dip"
    android:minWidth="160dip"
    android:updatePeriodMillis="10000" />

Nous avons alors défini la taille minimale de notre AppWidget grâce aux propriétés android:minHeight et android:minWidth.

Nous avons également défini la fréquence de mise à jour de notre AppWidget (défini en millisecondes) grâce à la propriété android:updatePeriodMillis et enfin, nous avons défini le layout qu’utilisera notre AppWidget : il s’agit du layout créé précédemment : main.xml.

L’AppWidgetProvider

Nous allons ensuite modifier notre classe Java TestAppWidgetProvider.java (situé dans le package com.yoannzimero.testappwidget) :

public class TestAppWidgetProvider extends AppWidgetProvider {

}

Mise à jour de l’AndroidManifest.xml

Et enfin, nous allons configurer notre fichier AndroidManifest.xml qui nous permettra de définir l’AppWidget que nous avons créé et de l’associer à notre classe Java TestAppWidgetProvider :

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.yoannzimero.testappwidget"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="7" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <receiver
            android:name=".TestAppWidgetProvider"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
            </intent-filter>

            <meta-data
                android:name="android.appwidget.provider"
                android:resource="@xml/my_widget_provider" />
        </receiver>
    </application>

</manifest>

Et voilà, votre premier AppWidget est terminé. Vous pouvez alors le tester!

Si vous souhaitez télécharger les sources de ce projet, cliquez ici.

Tester votre AppWidget

Vous pouvez maintenant tester votre AppWidget. Pour cela, lancer votre projet comme une application Android via Eclipse. L’AVD se lance. Clickez alors sur Menu puis sur Ajouter.

Sélectionnez ensuite Widgets. Dans la liste proposée, vous devriez alors voir apparaitre le nom de votre widget (My Hello World Widget) défini précédemment dans AndroidManifest.xml, faisant référence au string app_name.