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 }
3 Réponses :
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");
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.
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);
désinserdit votre récepteur sur Enregistrez-le sur diffusez vos données du service via une intention, par exemple: p>
Onpaause () Code>: P>
protected void onResume() {
super.onResume();
IntentFilter filter = new IntentFilter();
filter.addAction("android.intent.action.SmsReceiver");
registerReceiver(mServiceReceiver , filter);
}
OnResume () Code>: P>
@Override
protected void onPause() {
super.onPause();
try {
if(mServiceReceiver != null){
unregisterReceiver(mServiceReceiver);
}
} catch (Exception e) {
e.printStackTrace();
}
}
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");
}
};
@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é.
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 ); }