7
votes

Passer des données du récepteur de diffusion à une autre activité

Bonjour, j'ai eu un problème avec les récepteurs de diffusion et transmettre des informations à une autre activité. J'essaie de créer une application qui capturera des messages SMS entrants, recherchez un site Web dans le texte, puis sélectionnez une boîte de dialogue d'alerte demandant si l'utilisateur souhaite aller sur le site Web.

    public class ReceiveText extends Activity{
public void onCreate(Bundle savedInstanceState) {

// Somehow pass the string from the receiver into this activity, 
//stored in variable messages

findOpen(messages);

// is that possible?

}
public class findOpen(string messages){
// do stuff ... open alert...open site if OK
}


0 commentaires

3 Réponses :


16
votes

Si vous avez votre activité nommée receveztext code>, puis dans votre BroadCastraCeiver CODE>, vous devez effectuer les éléments suivants:

Intent intent = getIntent();
String message = intent.getStringExtra("message");


1 commentaires

Pour que quiconque allant de l'avant avec cette mise en œuvre, cela va redémarrer votre activité. Probablement quelque chose que vous ne voulez pas.



14
votes
  1. Instanciate d'un BroadCastreCeiver dans l'activité que vous souhaitez obtenir vos données, par exemple: p>

    Intent i = new Intent("android.intent.action.SmsReceiver").putExtra("incomingSms", message);
    i.putExtra("incomingPhoneNumber", phoneNumber);
    context.sendBroadcast(i);
    
  2. désinserdit votre récepteur sur Onpaause () Code>: P>

    protected void onResume() {
        super.onResume();
        IntentFilter filter = new IntentFilter();
        filter.addAction("android.intent.action.SmsReceiver");
        registerReceiver(mServiceReceiver , filter);
    }
    
  3. Enregistrez-le sur OnResume () Code>: P>

    @Override
    protected void onPause() {
        super.onPause();
        try {
            if(mServiceReceiver != null){
            unregisterReceiver(mServiceReceiver);
            }
        } catch (Exception e) {
           e.printStackTrace();
        }
    }
    
  4. diffusez vos données du service via une intention, par exemple: p>

    private BroadcastReceiver mServiceReceiver = new BroadcastReceiver(){
        @Override
        public void onReceive(Context context, Intent intent)
        {
            //Extract your data - better to use constants...
            String IncomingSms=intent.getStringExtra("incomingSms");//
            String phoneNumber=intent.getStringExtra("incomingPhoneNumber");
    
        }
    };
    

2 commentaires

@Dinesh oui. Le code est manquant d'intenthilter filtre = Nouvelle intentefilter ();


Bien mieux que la réponse ci-dessus à mon avis parce que vous n'avez pas à recharger l'activité.



0
votes

Nous pouvons envoyer les données d'Onreceive à une autre activité à l'aide de LocalBroadcastManager. Cela signifie que vous diffusez à nouveau les données à l'aide du contexte

@Override
    public void onReceive(Context context, Intent intent) {
    
        Log.d("Broadcast", "wifi  ConnectivityReceiver");
    
                Bundle extras = intent.getExtras();
                Intent intent = new Intent("broadCastName");
                // Data you need to pass to another activity
                intent .putExtra("message", extras.getString(Config.MESSAGE_KEY)); 
                context.sendBroadcast(intent );
    } 


0 commentaires