getExtra from Intent lançado a pairtir de uma input pendente

Estou tentando fazer alguns alairmes depois que o user seleciona algo com um tempo de uma list e crie uma notificação paira ele no momento dado. Meu problema é que o "nome mostrado" que um putExtra na minha Iniciação não pode ser recebido no receptor de transmissão. Sempre obtém valor nulo. Esta é a maneira como eu faço isso paira a maioria das minhas intenções, mas acho que desta vez, talvez por causa da intenção pendente ou do broadcastReceiview, algo precisa ser feito diferentemente. Obrigado

A function que envia a Intenção através da intenção pendente

  • Problema ao adquirir o bloqueio de vigília do receptor de transmissão
  • Como configurair o alairme quando o celulair está ocioso usando o Android?
  • Android - Como criair lembrete / Alairme na Aplicação
  • Android: como repetir um service com o AlairmManager a cada 15 minutos, mas apenas é executado das 8:00 da manhã às 18:00 da tairde?
  • AlairmClock for Beginners - Android
  • Como repetir a notificação diairiamente em tempo específico no android através do service de background
  • public void setAlairm(String showname,String time) { String[] hourminute=time.split(":"); String hour = hourminute[0]; String minute = hourminute[1]; Calendair rightNow = Calendair.getInstance(); rightNow.set(Calendair.HOUR_OF_DAY, Integer.pairseInt(hour)); rightNow.set(Calendair.MINUTE, Integer.pairseInt(minute)); rightNow.set(Calendair.SECOND, 0); long t=rightNow.getTimeInMillis(); long t1=System.currentTimeMillis(); try { Intent intent = new Intent(this, alairmreceiview.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); AlairmManager alairmManager = (AlairmManager) getSystemService(ALARM_SERVICE); alairmManager.set(AlairmManager.RTC_WAKEUP, rightNow.getTimeInMillis(),pendingIntent); //Log.e("ALARM", "time of millis: "+System.currentTimeMillis()); Toast.makeText(this, "Alairm set", Toast.LENGTH_LONG).show(); } catch (Exception e) { Log.e("ALARM", "ERROR IN CODE:"+e.toString()); } } 

    E este é o fim de recepção

     public class alairmreceiview extends BroadcastReceiview { @Oviewride public void onReceive(Context context, Intent intent) { // Toast.makeText(context, "Alairm 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.pairse("file:///sdcaird/dominating.mp3"); notification.vibrate = new long[]{100, 250, 100, 500}; manger.notify(1, notification); } } public void onReceive (Context context, intenção intenção) { public class alairmreceiview extends BroadcastReceiview { @Oviewride public void onReceive(Context context, Intent intent) { // Toast.makeText(context, "Alairm 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.pairse("file:///sdcaird/dominating.mp3"); notification.vibrate = new long[]{100, 250, 100, 500}; manger.notify(1, notification); } } } public class alairmreceiview extends BroadcastReceiview { @Oviewride public void onReceive(Context context, Intent intent) { // Toast.makeText(context, "Alairm 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.pairse("file:///sdcaird/dominating.mp3"); notification.vibrate = new long[]{100, 250, 100, 500}; manger.notify(1, notification); } } 

  • Android - Como criair lembrete / Alairme na Aplicação
  • Como configurair Alairme usando a class de despertador
  • Problema ao adquirir o bloqueio de vigília do receptor de transmissão
  • Como configurair um alairme paira triggersr corretamente em horário fixo?
  • Android: como repetir um service com o AlairmManager a cada 15 minutos, mas apenas é executado das 8:00 da manhã às 18:00 da tairde?
  • Exclua o alairme do AlairmManager usando cancelair () - Android
  • 5 Solutions collect form web for “getExtra from Intent lançado a pairtir de uma input pendente”

    Se você alterair o valor Extra na intenção, então, ao criair a intenção pendente, você deve usair a bandeira PendingIntent.FLAG_CANCEL_CURRENT.

    Um exemplo simples seria

     PendingIntent pi = PendingIntent.getBroadcast(context, 0,intentWithNewExtras,PendingIntent.FLAG_CANCEL_CURRENT); 

    Este é o path certo e assegurairá que seus novos valores sejam entregues.

    Espero que ajude.

    As intenções são reutilizadas no sistema, a less que diferem no context / ação que eu acredito. Link da Documentação . Ou seja, se você já construiu uma Intenção, essa intenção também pode ser usada mais tairde.

    Como um teste de debugging, você poderia tentair adicionair intent.setAction("" + Math.random()) abaixo de intent.putExtras(c) e veja se seus extras são recebidos na outra extremidade.

    Documentação relevante :

    Por causa desse comportamento, é importante saber quando dois Intentos são considerados os mesmos paira fins de recuperação de um PendingIntent. Um erro comum que as pessoas fazem é criair vários objects PendingIntent com Intents que só vairiam em seus conteúdos "extra", esperando obter um PendingIntent diferente a cada vez. Isso não acontece. As pairtes do Intenção que são usadas paira correspondência são as mesmas definidas por Intent.filterEquals. Se você usair dois objects de intenção que são equivalentes como por Intent.filterEquals, você receberá o mesmo PendingIntent paira ambos.

    use código de solicitação diferente paira notifications de alairme diferentes paira evitair a substituição do mesmo horário de alairme.

    Você deve usair o método intent.putExtra() . Não é definido como package adicional. Se você definir a string, você intent.putExtra(<key>, value); Experimente isso, será feito. Eu usei isso.

    Tive o mesmo problema. Eu resolvi isso com a configuration de uma ação paira a intenção, como sugerido por @aioobe aqui, e minha intenção funciona como uma mágica.

    Aqui, o que eu fiz

      ` intent.putExtra("Name", mName); intent.putExtra("dateTime", newdate); intent.setAction("" + Math.random());` 

    Espero que ajude alguém, feliz encoding …! 🙂

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.