web-dev-qa-db-fra.com

intent.putExtra () dans l'intention en attente ne fonctionne pas

Je passe une intention en attente par alarmreceiver, à partir d'une classe de service. Toutefois, après le lancement de l'attenteIntent, les informations intent.putExtra () ne sont pas reçues par la classe broadcastreceiver. Voici mon code pour le renvoi de l'attenteIntent

Intent aint = new Intent(getApplicationContext(), AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), id, aint, PendingIntent.FLAG_UPDATE_CURRENT);
aint.putExtra("msg", msg);
aint.putExtra("phone", phone);
alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pendingIntent);

La classe de récepteur d'alarme est ci-dessous

public String msg, phonen;

@Override
public void  onReceive(Context context, Intent intent){
    Bundle extras = intent.getExtras();
    msg = extras.getString("msg");
    phonen = extras.getString("phone");

    Log.d("onReceive", "About to execute MyTask");
    Toast.makeText(context,msg, Toast.LENGTH_LONG).show();
}

Les informations msg dans le pain grillé, reçues de l'intention en attente, ne sont pas affichées. Au lieu de cela, un pain grillé vierge est affiché.

18
Arnab

Essaye ça

Intent aint = new Intent(getApplicationContext(), AlarmReceiver.class);
aint.putExtra("msg", msg);
aint.putExtra("phone", phone);



PendingIntent pendingIntent = PendingIntent.getBroadcast(
    getApplicationContext(),
    id, 
    aint,
    // as stated in the comments, this flag is important!
    PendingIntent.FLAG_UPDATE_CURRENT);
34
ayesh don

Vous devez utiliser getStringExtra() et vous assurer que la chaîne n'est pas nulle:

     Intent intent = getIntent();    
     msg = intent.getStringExtra("msg");
     phonen = intent.getStringExtra("phone");

     if(msg!=null){
      Toast.makeText(context,msg,
        Toast.LENGTH_LONG).show();
     }

et inverser votre putExtras avant PendingIntent:

   Intent aint = new Intent(getApplicationContext(), AlarmReceiver.class);
   aint.putExtra("msg", msg);
   aint.putExtra("phone", phone);
   PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), id, aint, PendingIntent.FLAG_UPDATE_CURRENT);
1
Opiatefuchs

N'oubliez pas de mettre un identifiant unique dans le constructeur PendingIntent, sinon vous pourriez avoir un problème étrange lorsque vous essayez d'obtenir les valeurs putExtra.

    PendingIntent pendingIntent = PendingIntent.getBroadcast(
           getApplicationContext(), 
           UUID.randomUUID().hashCode(), 
           aint, 
           PendingIntent.FLAG_UPDATE_CURRENT
    );
1
Hal Cheung

En effet, vous devez d'abord initialiser l'intention et ajouter à PendingIntent. Après cela, vous ajoutez des informations dans l'intention. Vous devez ajouter des informations à l'intention, puis ajouter cette intention à PendingIntent.

1
Haris Qureshi