rubixcube Posté(e) 28 mai 2010 Share Posté(e) 28 mai 2010 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 ? Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Profete162 Posté(e) 28 mai 2010 Share Posté(e) 28 mai 2010 Le premier lien ne fonctionne pas? http://www.google.be/search?sourceid=chrome&ie=UTF-8&q=android+service+tutorial Je ne me suis pas encore lancé là dedans... Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
rubixcube Posté(e) 28 mai 2010 Auteur Share Posté(e) 28 mai 2010 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. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Burn2 Posté(e) 28 mai 2010 Share Posté(e) 28 mai 2010 (modifié) En fait il faut démarrer le service à la main. (je n'ai pas testé de redémarrer pour voir s'il bootait ou pas) Regarde un peu par là, j'ai mis quelques informations: https://forum.frandroid.com/forum/viewtopic.php?pid=192579#p192579 Modifié 28 mai 2010 par Burn2 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
popolbx Posté(e) 28 mai 2010 Share Posté(e) 28 mai 2010 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..... Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
rubixcube Posté(e) 28 mai 2010 Auteur Share Posté(e) 28 mai 2010 ok popolbx merci. j'ai pas (encore) reçus ton mail. jvais tester ça cette aprem, je verrai ce que sa donne. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
rubixcube Posté(e) 28 mai 2010 Auteur Share Posté(e) 28 mai 2010 si je déclare tout le machin au début, et que je met uniquement amgr.setRepeating(AlarmManager.RTC, SystemClock.elapsedRealtime(),15000, pending); dans le bouton, sa devrait marcher non ? Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
rubixcube Posté(e) 28 mai 2010 Auteur Share Posté(e) 28 mai 2010 (modifié) 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é 28 mai 2010 par rubixcube Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
rubixcube Posté(e) 30 mai 2010 Auteur Share Posté(e) 30 mai 2010 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 . Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
popolbx Posté(e) 30 mai 2010 Share Posté(e) 30 mai 2010 il est où le onStart dans le service ?c est la méthode onStart qui va s exécuter ...si elle est pas surchargée. ..le startservice ne sers a rien (renomme le onStart ) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
rubixcube Posté(e) 30 mai 2010 Auteur Share Posté(e) 30 mai 2010 ok ( donc j'avais rien compris au tuto en anglais que j'avais trouvé ><' ) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
dekans Posté(e) 30 mai 2010 Share Posté(e) 30 mai 2010 (modifié) 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é 30 mai 2010 par dekans Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
rubixcube Posté(e) 13 juin 2010 Auteur Share Posté(e) 13 juin 2010 (modifié) 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é 13 juin 2010 par rubixcube Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
popolbx Posté(e) 13 juin 2010 Share Posté(e) 13 juin 2010 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 ^ Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
rubixcube Posté(e) 13 juin 2010 Auteur Share Posté(e) 13 juin 2010 alors je vais répondre point par point : 1° bien vue, je vais le rajouter 2° 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 ; Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
rubixcube Posté(e) 13 juin 2010 Auteur Share Posté(e) 13 juin 2010 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 :/ Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Burn2 Posté(e) 13 juin 2010 Share Posté(e) 13 juin 2010 (modifié) Il manque des choses dans ton corps de onStart() @Override public void onStart(Intent intent, int startId) { super.onStart(intent, startId); } Modifié 13 juin 2010 par Burn2 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
rubixcube Posté(e) 13 juin 2010 Auteur Share Posté(e) 13 juin 2010 effectivement je n'ai plus d'erreurs. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
rubixcube Posté(e) 13 juin 2010 Auteur Share Posté(e) 13 juin 2010 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 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Burn2 Posté(e) 13 juin 2010 Share Posté(e) 13 juin 2010 "06-13 13:02:49.523: ERROR/AndroidRuntime(3298): Caused by: java.lang.NullPointerException" Voilà ou est le prpoblème... Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
rubixcube Posté(e) 13 juin 2010 Auteur Share Posté(e) 13 juin 2010 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) } Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Fluckysan Posté(e) 14 juin 2010 Share Posté(e) 14 juin 2010 Tu as quoi à cette ligne ? rubix.sms.notifier.smsnotifier.affichNotification(smsnotifier.java:70) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
rubixcube Posté(e) 15 juin 2010 Auteur Share Posté(e) 15 juin 2010 la ligne 70 de smsnotifier.java correspond à ma requête sql : final Cursor c = managedQuery(sms, SMS_REPORT_STATUS_PROJECTION, null, null, null);//requête SQLlite Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Rejoignez la conversation
Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.