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é.
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);
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);
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
);
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.