mardi 29 novembre 2011

Tutorial Android : Lancer un service au boot d'AndroId

Il est tout à fait possible dans Android de lancer une application au démarrage du système d'exploitation, sans fenêtre graphique (sans activité), sans icône de démarrage, uniquement en tâche de fond : il s'agit d'un service.

Le tutorial suivant vous propose un petit programme uniquement constitué de deux composants Android, sans aucune interface graphique :

- 1 service (il sera notre tâche de fond)
- 1 "broadcast receiver". Celui-ci recevra un "intent" nous avertissant que le démarrage du système est terminé. Il lancera ensuite le service.

Remarque : Ici on utilise le sdk Android 2.2.

Voici les différentes étapes pour créer un tel programme :

1. Créez un projet Android sans activité graphique :

Ne pas sélectionner la création d'une activité




















2. Créez une classe service comme ci-dessous :


public class MonService extends Service {

@Override
public void onDestroy() {
Log.v( "LTM","onDestroy" );
super.onDestroy();
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.v( "LTM","onStartCommand" );
return super.onStartCommand(intent, flags, startId);
}

@Override
public IBinder onBind( Intent arg0 ) {
Log.v( "LTM","onBind" );
return null;
}
}



3. Créez une classe "receiver" comme ci-dessous :


public class MyReceiver extends BroadcastReceiver {

@Override
public void onReceive( Context ctx, Intent i ) {
Log.v( "LTM", "MyReceiver.onReceive : " + i.getAction() );
Intent intent = new Intent( ctx, MonService.class );
ctx.startService(intent);
}
}


4. Mettre à jour le fichier manifeste : il vous faut évidemment indiquer les 2 composants crées dans le fichier manifeste : le service et le receiver.
Il est nécessaire également d'intégrer la permission ci-dessous.



<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.ltm.service"
    android:versionCode="1"
    android:versionName="1.0" >

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

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <service android:label="Mon beau service à moi" 
            android:name="MonService"
android:exported="false">
        service>
        <receiver
            android:name="MyReceiver">
<intent-filter>
                    <action android:name="android.intent.action.BOOT_COMPLETED" />
            intent-filter>
         receiver>
    application>
manifest>



5. Il ne vous reste plus qu'à compiler votre application et de la tester sur un périphérique.

Explications :
Notre application va recevoir l'intent 'BOOT_COMPLETED" via le receiver. Une fois cet événement reçu ce dernier lancera le service.

Et voilà, le tour est jouer !

A vous maintenant de jouer !

0 commentaires:

Enregistrer un commentaire