Le SDK d’Android propose un modèle de composants et des APIs pour gérer différents dispositifs qui font la particularité des plateformes mobiles : connectivité, capteurs, téléphonie, multimédia …
Dans cet article nous allons nous intéresser à la détection d’événements liés à la téléphonie et la géolocalisation.
Un modèle de composants adapté
L’activité est le premier composant essentiel permettant
de gérer le cycle de vie d’une application et l’interactivité avec l’utilisateur ; mais qu’en est-il lorsqu’on souhaite exécuter un traitement en tâche de fond, qui démarre automatiquement, et qui doit réagir à des événements externes comme un appel téléphonique ? Le framework propose pour cela des composants de type service et receiver qui utilisent des intentions (Intent) pour collaborer.
Les services : pour des traitements en tâche de fond
Le service peut être vu comme une activité à longue durée de vie (potentiellement infinie), en tâche de fond, et privée d’IHM; il est implémenté par une classe qui doit étendre android.app.Service.
Démarrage du service : à la différence d’une activité, l’utilisateur ne dispose pas de raccourci dans son bureau, il faudra donc démarrer le service explicitement de manière programmatique (souvent depuis une activité).
Les services d’une application doivent être déclarés dans son manifeste :
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity .../>
<service android:name=".Service" />
</application>
Un service peut, comme une activité, enregistrer des écouteurs spécialisés (listeners) pour obtenir des informations sur un capteur particulier, il est alors responsable du désenregistrement des listeners.
Receiver : un déclencheur léger
Le receiver est un composant susceptible de recevoir des intentions exprimées par le système Android ou d’autres applications. Les intentions symbolisent des requêtes (ou souhaits) et sont orchestrées par le framework ; cela offre un cadre simple et générique qui fait penser au style d’architecture REST (ou au Web), et confère un niveau d’abstraction intéressant pour faciliter l’intégration de composants. (more…)