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 :
2. Créez une classe service comme ci-dessous :
3. Créez une classe "receiver" comme ci-dessous :
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.
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 !
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 !
Bonjour. Le sujet est intéressant, mais j'aurais été intéressé pour avoir plus d'explications sur les différents "class" SDK appelées lors de ce petit programme ... (ex.:LogV, getAction ...)
RépondreSupprimerMerci, bonne journée.
La classe Log est une classe java permettant de mettre des traces dans une application Android. Dans Eclipse il y a une fenêtre disponible pour suivre ces traces.
RépondreSupprimerLog.v veut dire verbose (v pour verbose)
getAction() est une méthode de la classe Intent qui permet de recevoir l'action correspondant à un intent donné, ici : "android.intent.action.BOOT_COMPLETED"
ecoute j'ai tout fait comme indiqué mais le service ne se lance pas j'ai rien dans le logcat, mais alors rien du tout lol
RépondreSupprimersi tu pouvais m'aider
merci