Aller au contenu

Lancer une intent avec un service


grofs

Recommended Posts

Hey, j'ai réussis à faire marcher mon service et je suis très fier :) mais un problème reste. Pour mon service je voudrais que dès que je reçois un sms une nouvelle intent se lance or, quand je lance le service et que je reçois un sms ça me met une erreur "forcer la fermeture" .

Voici mon code ( ne vous soucier pas des parties de codesque j'ai mis en "//" ;) )

package com.grofs.sms;



import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.ServiceConnection;
import android.os.Binder;
import android.os.Bundle;
import android.os.IBinder;
import android.os.Vibrator;
import android.telephony.SmsManager;
import android.telephony.SmsMessage;
import android.util.Log;
import android.widget.TextView;
import android.widget.Toast;

public class texto_r extends Service {



   TextView text;

   public static final String EVENT_ACTION = "Texto service";
   private final IBinder binder = new MyBinder();
   private texto_r serviceBinder;
   boolean   started;


   Vibrator vibrator;

   public class MyBinder extends Binder{
       texto_r getService(){
           return texto_r.this;
       }


   }



   @Override
   public IBinder onBind(Intent intent) {
        return binder;
   }

   @Override
   public void onCreate() {

       //SMS
       vibrator = (Vibrator)getSystemService(Context.VIBRATOR_SERVICE);
       SmsManager smsManager = SmsManager.getDefault();
       Receiver receiver = new Receiver();





       registerReceiver(receiver, new IntentFilter("android.provider.Telephony.SMS_RECEIVED"));

       //Avertissement pour prévenir que le service est bien lancé

       Toast.makeText(this, "Texto marche maintenant en tâche de fond", Toast.LENGTH_SHORT).show();




           super.onCreate();

   }



   @Override
   public void onDestroy() {
       // TODO Auto-generated method stub
       super.onDestroy();
   }

   @Override
   public void onStart(Intent intent, int startId) {

       super.onStart(intent, startId);
   }

   public class Receiver extends BroadcastReceiver{

       @Override
   public void onReceive(Context context, Intent intent) {
           // TODO Auto-generated method stub


           Intent intent1 = new Intent (context, TextoReceive.class);
           startActivity(intent1);
           Toast.makeText(context, R.string.texto , Toast.LENGTH_SHORT).show();
           vibrator.vibrate(500);




Merci d'avance :)

Lien vers le commentaire
Partager sur d’autres sites

Dans tes logs (regarde-les : il y a une stack-trace avec des messages qui te donneront toujours des indications précises !), tu vas trouver un message qui parle de NEW_TASK flag ou un truc du genre.

C'est simplement qu'un service est dans une "tache", et que lorsque du lances une activity tu as le choix de le faire depuis la tache en cours, ou de forcer la création d'une nouvelle tache. Or depuis un service, tu ne peux lancer d'activity dans la même tache, et t dois donc forcer la création d'une nouvelle tache pour cette activity, ça passe par un flag à ajouter à l'intent.

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

Mais vraiment, REGARDE TES LOGS !

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...