Aller au contenu

cherche tuto pour créer un service ( tache de fond)


rubixcube

Recommended Posts

bonjour

pour mon application j'aurais besoin d'un service qui tourne en tâche de fond ( un peu comme les 'task manager' qui vérifie toutes les X secondes le nombre d'appli qui tourne ).

cependant, même en cherchant sur le net je ne trouve rien qui puisse m'aider.

quelqu'un pourrait m'expliquer comment faire ?

Lien vers le commentaire
Partager sur d’autres sites

ben [color=red]jsuis[/color] déjà aller voir le premier lien ( et ceux d'en dessous par la même occasion)

j'adapte ce que je trouve a ce qu'il me faut.

il n'y a pas d'erreur, sa compile.... et après sa fait rien du tout .

j'ai même essayer de regarder avec le logcat en mode débug avec des points d'arret et tout , mais rien n'y fait.

Lien vers le commentaire
Partager sur d’autres sites

j'étais persuadé t avoir répondu rubixcube ^^

tu as eut mon mail avec la programmation de l'alarmmanager pour démarrer le service ?

Intent i = new Intent();

ComponentName comp = new ComponentName(getPackageName(),tonservice.class.getCanonicalName());

i.setComponent(comp);

PendingIntent pending = PendingIntent.getService(this, 0,

i,PendingIntent.FLAG_UPDATE_CURRENT);

AlarmManager amgr = (AlarmManager) getSystemService(ALARM_SERVICE);

amgr.setRepeating(AlarmManager.RTC, SystemClock.elapsedRealtime(),15000, pending);

si tu mets ce bout de code sur un bouton ton service s exécutera toutes les 15 secondes même une fois l activity fermée.

attention évidement à ne pas killer les tâches avec un taskiller ou autre.

Si tu veux démarrer au boot tu fais un brodcastreceiver qui capte le boot et tu mets ce bout de code dans le onReceive.....

Lien vers le commentaire
Partager sur d’autres sites

soit j'ai merdé quelque part, soit j'ai merdé quelque part, mais en tout cas, sa marche pas !

j'ai mis ton code popol, en mettant bien mon nom de service et tout ce qu'il faut, mais

1° quand j'essaye de le mettre sur un bouton je me retrouve avec un nullpointerexception ( ?? )

2° quand je le met directement comme ça, l'ui de l'appli ( qui se lance d'habitude) ne se lance pas, et après il ne se passe rien.

EDIT : j'ai essayer de remettre monancien code, et j'ai aussi une nullpointerexception sur

 bouton.setOnClickListener(new Button.OnClickListener() {
           public void onClick(View v) {
               affichNotification() ;
           }
       });

Modifié par rubixcube
Lien vers le commentaire
Partager sur d’autres sites

bon alors j'ai bidouiller un peu hier soir, j'ai un truc qui remarche enfin.

le soucis que j'ai maintenant, c'est que j'ai du raté quelque chose au niveau du service.

j'ai copié le code de popolbx, je lance le programme , la fenêtre de mon activity se lance et .... ba mon service fait rien ( j'appelle le service dés le début de l'activité)

package rubix.sms.notifier;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;

public class SmsService extends Service{

   public smsnotifier sms = new smsnotifier() ;
   @Override
   public void onCreate(){
       super.onCreate();

   }
   public void startservice() {

   sms.affichNotification() ;

   }
   @Override
   public IBinder onBind(Intent arg0) {
       // TODO Auto-generated method stub
       return null;
   }

}

voila l code de mon service, smsnotifier étant l'activité et affichNotification la fonction qui traite tout le bordel et l'envoi de la barre de notif.

ou est ce que j'ai merdé ? si quelqu'un peut m'aider je lui en serait reconnaissant .

Lien vers le commentaire
Partager sur d’autres sites

Basiquement t'as pas grand chose à faire :

tu fais une classe service

et dans l'activity:

//tu créés un intent
serviceIntent = new Intent(this, TaClasseService.class);
//tu lances le service
startService(serviceIntent);
//et tu le stoppes
stopService(serviceIntent);

Et en plus de ça Popolbx t'as filé ce qu'il faut pour lancer le service en dehors de l'activity.

Modifié par dekans
Lien vers le commentaire
Partager sur d’autres sites

  • 2 weeks later...

I NEED HEEEEEELLLLLPPPPPPP !

j'ai essayé et le code de popolbx et le bout de code de dekans et ça ne marche pas mon appli se lance, affiche l'écran de l'activity et puis rien ne se passe ... :'(

actuellement j'ai

Intent i = new Intent();
       ComponentName comp = new ComponentName(getPackageName(),SmsService.class.getCanonicalName());
       i.setComponent(comp); 
       PendingIntent pending = PendingIntent.getService(this, 0, i,PendingIntent.FLAG_UPDATE_CURRENT);
       AlarmManager amgr = (AlarmManager) getSystemService(ALARM_SERVICE);
       amgr.setRepeating(AlarmManager.RTC, SystemClock.elapsedRealtime(),15000, pending);

dans le oncreate de l'activity.

et mon service

package rubix.sms.notifier;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;

public class SmsService extends Service{

   public smsnotifier sms = new smsnotifier() ;
   @Override
   public void onCreate(){
       super.onCreate();

   }
   public void onStart() {

       sms.affichNotification() ;

   }
   @Override
   public IBinder onBind(Intent arg0) {
       // TODO Auto-generated method stub
       return null;
   }

}

affichnotification() étant la fonction qui permet d'afficher ce que je veux. ( et qui marche si je l'appelle directement depuis l'activity, part un bouton par exemple).

quelqu'un aurait une solution ?

Modifié par rubixcube
Lien vers le commentaire
Partager sur d’autres sites

là j 'ai deux remarques:

1 - il manque le override sur le onStart

2 - pour choper la notification, il faut un Context. hors ton smsnotifier n'a pas de COntext en paramètres et ton affichenotification non plus....comment la fonction va créer sa notification ?

si on pouvait avir le code de affichenotification ^

Lien vers le commentaire
Partager sur d’autres sites

alors je vais répondre point par point :

1° bien vue, je vais le rajouter

voila le code fonction affichnotification

Uri sms = Uri.parse("content://sms/sent");// chemin(URI) contenant les sms envoyés
       final Cursor c = managedQuery(sms, SMS_REPORT_STATUS_PROJECTION, null, null, null);//requête SQLlite

       String contentText = "" ;
       c.moveToFirst() ;
       contentText = c.getString(0) + "/" + getSmsStatusText(c.getInt(1))  ;

       final String text = contentText ;

       final NotificationManager myNM = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 

       myNM.notify(1,getNotification(c,text));

       c.close();

et le code de getNotification

long when = System.currentTimeMillis();
       int icon = R.drawable.icon;
       CharSequence tickerText = "Notification sms accusé de réception";
       final Notification notif = new Notification(icon, tickerText, when);

       Context context = getApplicationContext();
       CharSequence contentTitle = "longueur curs" + curs.getCount();
       Intent notificationIntent = new Intent(this, smsnotifier.class);
       PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
       notif.setLatestEventInfo(context, contentTitle,text, contentIntent);
       return notif ;

Lien vers le commentaire
Partager sur d’autres sites

correction :

lorsque je rajoute @Override devant public void onStart() {

il me met une erreur, l'erreur étant :

the method onStart() of type SmsService must override or implement a supertype method

( gné ??)

et il me propose comme solution .... d'enlever le @Override :/

Lien vers le commentaire
Partager sur d’autres sites

j'ai essayé de relancer l'application et j'ai un FC

voici l'erreur sortie du logcat ( d'ailleurs j'y comprend rien a cette erreur :/ )

06-13 13:02:49.503: ERROR/AndroidRuntime(3298): Uncaught handler: thread main exiting due to uncaught exception
06-13 13:02:49.523: ERROR/AndroidRuntime(3298): java.lang.RuntimeException: Unable to start service rubix.sms.notifier.SmsService@43b3d080 with Intent { flg=0x4 cmp=rubix.sms.notifier/.SmsService (has extras) }: java.lang.NullPointerException
06-13 13:02:49.523: ERROR/AndroidRuntime(3298):     at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2882)
06-13 13:02:49.523: ERROR/AndroidRuntime(3298):     at android.app.ActivityThread.access$3500(ActivityThread.java:119)
06-13 13:02:49.523: ERROR/AndroidRuntime(3298):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1926)
06-13 13:02:49.523: ERROR/AndroidRuntime(3298):     at android.os.Handler.dispatchMessage(Handler.java:99)
06-13 13:02:49.523: ERROR/AndroidRuntime(3298):     at android.os.Looper.loop(Looper.java:123)
06-13 13:02:49.523: ERROR/AndroidRuntime(3298):     at android.app.ActivityThread.main(ActivityThread.java:4363)
06-13 13:02:49.523: ERROR/AndroidRuntime(3298):     at java.lang.reflect.Method.invokeNative(Native Method)
06-13 13:02:49.523: ERROR/AndroidRuntime(3298):     at java.lang.reflect.Method.invoke(Method.java:521)
06-13 13:02:49.523: ERROR/AndroidRuntime(3298):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
06-13 13:02:49.523: ERROR/AndroidRuntime(3298):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
06-13 13:02:49.523: ERROR/AndroidRuntime(3298):     at dalvik.system.NativeStart.main(Native Method)
06-13 13:02:49.523: ERROR/AndroidRuntime(3298): Caused by: java.lang.NullPointerException
06-13 13:02:49.523: ERROR/AndroidRuntime(3298):     at android.content.ContextWrapper.getContentResolver(ContextWrapper.java:90)
06-13 13:02:49.523: ERROR/AndroidRuntime(3298):     at android.app.Activity.managedQuery(Activity.java:1495)
06-13 13:02:49.523: ERROR/AndroidRuntime(3298):     at rubix.sms.notifier.smsnotifier.affichNotification(smsnotifier.java:70)
06-13 13:02:49.523: ERROR/AndroidRuntime(3298):     at rubix.sms.notifier.SmsService.onStart(SmsService.java:18)
06-13 13:02:49.523: ERROR/AndroidRuntime(3298):     at android.app.Service.onStartCommand(Service.java:306)
06-13 13:02:49.523: ERROR/AndroidRuntime(3298):     at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2873)
06-13 13:02:49.523: ERROR/AndroidRuntime(3298):     ... 10 more

Lien vers le commentaire
Partager sur d’autres sites

alors ma question est, pourquoi j'ai un nullpointerexception ? est ce que l'erreur viendrait pas plutot du intent

Unable to start service rubix.sms.notifier.SmsService@43b3d080 with Intent { flg=0x4 cmp=rubix.sms.notifier/.SmsService (has extras) }

Lien vers le commentaire
Partager sur d’autres sites

Rejoignez la conversation

Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.

Invité
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...