getExtra de l'Intention lancé à partir d'un pendingIntent
Je suis en train de faire de certaines alarmes lorsque l'utilisateur sélectionne quelque chose avec un temps à partir d'une liste et de créer une notification pour elle à ce moment là. Mon problème est que le "showname" qu'un putExtra sur mon Intention ne peut pas être reçu au récepteur de radiodiffusion. Il est toujours la valeur null.
C'est la façon dont je le fais pour la plupart de mes intentions mais je pense que cette fois peut-être à cause de la pendingIntent ou le broadcastReceiver quelque chose doit être fait differentelly.
Merci
La fonction qui envoie l'Intention par le biais de l'attente de l'intention
public void setAlarm(String showname,String time) {
String[] hourminute=time.split(":");
String hour = hourminute[0];
String minute = hourminute[1];
Calendar rightNow = Calendar.getInstance();
rightNow.set(Calendar.HOUR_OF_DAY, Integer.parseInt(hour));
rightNow.set(Calendar.MINUTE, Integer.parseInt(minute));
rightNow.set(Calendar.SECOND, 0);
long t=rightNow.getTimeInMillis();
long t1=System.currentTimeMillis();
try {
Intent intent = new Intent(this, alarmreceiver.class);
Bundle c = new Bundle();
c.putString("showname", showname);//This is the value I want to pass
intent.putExtras(c);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 12345, intent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, rightNow.getTimeInMillis(),pendingIntent);
//Log.e("ALARM", "time of millis: "+System.currentTimeMillis());
Toast.makeText(this, "Alarm set", Toast.LENGTH_LONG).show();
} catch (Exception e) {
Log.e("ALARM", "ERROR IN CODE:"+e.toString());
}
}
Et c'est la fin de réception
public class alarmreceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//Toast.makeText(context, "Alarm worked.", Toast.LENGTH_LONG).show();
Bundle b = intent.getExtras();
String showname=b.getString("showname");//This is where I suppose to receive it but its null
NotificationManager manger = (NotificationManager) context
.getSystemService(context.NOTIFICATION_SERVICE);
Notification notification = new Notification(R.drawable.icon,
"TVGuide Υπενθύμιση", System.currentTimeMillis());
PendingIntent contentIntent = PendingIntent.getActivity(context, 0,
new Intent(context, tvguide.class), 0);
notification.setLatestEventInfo(context, "Το Πρόγραμμα Ξεκίνησε",
showname, contentIntent);
notification.flags = Notification.FLAG_ONLY_ALERT_ONCE;
notification.sound = Uri.parse("file:///sdcard/dominating.mp3");
notification.vibrate = new long[]{100, 250, 100, 500};
manger.notify(1, notification);
}
}
Vous devez vous connecter pour publier un commentaire.
Si vous modifiez le Supplément de valeur dans l'intention, puis lors de la création dans l'attente de l'intention, vous devez utiliser le drapeau PendingIntent.FLAG_CANCEL_CURRENT.
Un exemple simple serait
C'est la bonne façon et de s'assurer que les nouvelles valeurs sont livrés.
Espère que cela aide.
Intentions sont réutilisés dans le système, sauf si elles diffèrent sur le contexte/l'action, je crois. Documentation Lien. C'est, si vous avez déjà construit une Intention, que l'intention peut être utilisé plus tard.
Comme un debug-test, vous pouvez essayer d'ajouter
intent.setAction("" + Math.random())
ci-dessousintent.putExtras(c)
et de voir si vos extras sont reçus dans l'autre extrémité.La Documentation Pertinente:
utiliser différents code de la demande pour les différentes notifications d'alarme afin d'éviter l'écrasement de même l'heure de l'alarme.
Vous devez utiliser
intent.putExtra()
méthode. Définissez pas de bundle pour les extras segment. SI vous définissez la chaîne, vous devraitintent.putExtra(<key>, value);
Essayer ce sera fait. Je l'ai utilisé.J'ai eut le même problème. Je l'ai résolu avec la définition d'une action à l'intention comme suggéré par @aioobe ici, et mon intention fonctionne comme une magie.
Ici ce que j'ai fait
Espère que ça aidera quelqu'un, heureux de codage..! 🙂