2012-03-14 25 views
5

intento mostrar notificaciones diferentes después de un intervalo de tiempo, pero lo que sucede es que actualiza el actual PendingIntent por el nuevo como resultado recibo solo una notificación incluso si ignoro 4 - 5 solicitudes de intentos pendientesNuevas actualizaciones actuales actualizadas intención actual

el clic de botón hago lo siguiente

try{ 
       adapter.OpenDB(); 
      int id = adapter.getMaxId("reminder")+1; 
      adapter.CloseDB(); 
      Intent intent = new Intent(MilestonesActivity.this, AlarmReceiver.class); 
      intent.putExtra("message", ""+editMsg.getText()+" "+editDate.getText());    
      intent.putExtra("id", id); 
       PendingIntent pendingIntent = PendingIntent.getBroadcast(MilestonesActivity.this, 0, 
       intent, PendingIntent.FLAG_UPDATE_CURRENT); 
       am.set(AlarmManager.RTC_WAKEUP, 
       reminddate.getTimeInMillis(), pendingIntent); 

      adapter.CloseDB(); 
      }catch (Exception e) { 
       // TODO: handle exception 
      } 

AlarmReceiver.java

@Override 
public void onReceive(Context context, Intent intent) { 

    Intent i =new Intent(context, NotificationService.class); 

    try{ 

    int id = intent.getExtras().getInt("id"); 
     i.putExtra("id", id); 
    CharSequence message = intent.getExtras().getString("message"); 
     i.putExtra("message", message); 
    }catch (Exception e) { 
     // TODO: handle exception 
    } 
    context.startService(i); 

} 

Notificatio nService.java

public void show(Intent intent) { 
try{ 
     NotificationManager nm; 
     Log.e("recieve", "ok"); 
     nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 
     CharSequence from = "Lawyer app Reminder"; 
     CharSequence message = intent.getExtras().getString("message"); 
     PendingIntent contentIntent = PendingIntent.getActivity(this, 0, new Intent(), 
       PendingIntent.FLAG_ONE_SHOT);// also tried FLAG_UPDATE_CURRENT 
     int id =intent.getExtras().getInt("id"); 
     Log.e("I", ""+id); 
     Notification notif = new Notification(R.drawable.message_active, 
     "Lawyer app Reminder.", System.currentTimeMillis()); 
     notif.defaults = Notification.DEFAULT_ALL; 
     notif.flags = Notification.FLAG_AUTO_CANCEL; 

     notif.setLatestEventInfo(this, from, message, contentIntent); 
     nm.notify(id, notif); 

}catch (Exception e) {   
    e.printStackTrace();    
} 

plaese me ayude con este .thanks de antemano

Respuesta

3

Si el valor de id en nm.notify(id, notif); es igual entonces se sobrescribe la Notificación.

Así que hay que asegurarse de que el id es diferente para diferentes Notificación

+0

sí, la identificación es diferente cada vez y cuando disparo la primera solicitud para ser despedido después de 2 minutos y segundo después de 3 minutos, muestra una notificación única después de 3 minutos, no después de 2 minutos como este actualiza. – Mahesh

30

lo encontré

el segundo parámetro del constructor pendingintent no debe ser el mismo (que se 0 cifrados duros)

he cambiado a (int) System.currentTimeMillis() por lo que no debe ser el mismo :)

Intent ni =new Intent(NotificationService.this,ModifyDatabaseService.class); 
     ni.putExtra("id", ""+id); 
     PendingIntent contentIntent = PendingIntent.getActivity(this, (int) System.currentTimeMillis(), ni, 
       PendingIntent.FLAG_ONE_SHOT); 
+12

Madre-uckers! Tuve exactamente el mismo problema. La documentación de -ing incluso dice "actualmente no usado". Actualmente no usa mi culo. – Timmmm

+0

* Actualización *: Tras realizar más pruebas, realmente funciona con solo tener 0 como el segundo parámetro siempre que use 'FLAG_ONE_SHOT'. Puedes hacer cualquiera o básicamente. 'FLAG_ONE_SHOT' parece más correcto sin embargo. – Timmmm

+1

* Actualización 2 *: Deséame el comentario anterior. 'FLAG_ONE_SHOT' hace que el' Intent' anterior no haga nada. Es decir. una vez que se utiliza el 'FLAG_ONE_SHOT'' Intento', se convierte en un nop 'Intent()'. Por lo tanto, siempre debe usar códigos de solicitud únicos. – Timmmm

0

En su caso si el segundo PendingIntent es "igual" al anterior, lo reemplaza.

PendingIntents son iguales si todos de los siguientes son los mismos:

  1. El requestCode (segundo parámetro pasado al método de fábrica)
  2. todos los datos (tipo, uri, categoría el Intent 's. .etc)

Por lo tanto, si no desea que el segundo PendingIntent anule el anterior, cambie uno de la lista anterior.

Cuestiones relacionadas