2016-05-06 5 views
0

Ich denke, es ist schwer zu erklären, nur durch den Titel dieser Frage zu lesen. Ich kodiere eine App, die Umgebungsfaktorenalarme (Temperatur usw.) von einem bekannten Server an GCM sendet, und dann sendet GCM sie zurück an das Telefon. Das ganze GCM funktioniert gut. Das Problem ist, wenn Benachrichtigungen ankommen. Es wird angenommen, dass Benachrichtigungen an das Telefon gesendet werden, wenn eine Warnung auftritt (ein Auslöser). Wenn Sie dann auf die Warnung klicken, wird die Aktivität gestartet, um die Warnung anzuzeigen. Das ist in Ordnung, aber wenn zwei oder mehr Alarme darauf warten, angeklickt zu werden, wird nur einer verarbeitet und der Rest ignoriert ("mensaje"). So sieht meine Benachrichtigung innerhalb einer Klasse aus, die extends GcmListenerService ausdehnt.So verarbeiten Sie GCM-Benachrichtigungen, Starten der Aktivität pro Alarm, ohne andere Alarme zu löschen

public static void showAlerts(Context context, String mensaje) 
{ 
    Intent notificationIntent = new Intent(context.getApplicationContext(), MainActivity.class); 
    notificationIntent.putExtra("mensaje", mensaje); 
    notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP 
      | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
    Random r = new Random(); 

    PendingIntent pendingIntent = PendingIntent.getActivity(context, r.nextInt(), 
      notificationIntent, 0); 
    NotificationManager notificationManager = (NotificationManager) context 
      .getSystemService(Context.NOTIFICATION_SERVICE); 

    Notification notification = new NotificationCompat.Builder(context) 
      .setContentTitle(context.getString(R.string.app_name)) 
      .setContentText("Nueva alerta recibida") 
      .setSmallIcon(R.drawable.termometrorojo) 
      .setNumber(UtilidadesGCM.num_notificaciones++) 
      .setOnlyAlertOnce(true) 
      .setContentIntent(pendingIntent) 
      .setWhen(System.currentTimeMillis()) 
      .setDefaults(Notification.DEFAULT_SOUND | Notification.DEFAULT_VIBRATE) 
      .setDefaults(Notification.DEFAULT_LIGHTS) 
      .setAutoCancel(true).build(); 

    notificationManager.notify(0, notification); 
} 

Dann in MainActivity, ich habe den Code, dies zu verarbeiten, und die Aktivität öffnen Sie den Alarm

private final BroadcastReceiver mHandleMessageReceiver = new BroadcastReceiver() 
{ 
    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     String nuevaAlerta = intent.getExtras().getString("mensaje"); 
     procesaAlerta(nuevaAlerta); 

     //mDisplay.append(nuevaAlerta + "\n"); 
    } 
}; 



public void procesaAlerta (String alerta) 
{ 
    Intent intent = new Intent(this, Alertas.class); 
    intent.putExtra("mensaje" , alerta); 
    startActivity(intent); 
} 

Die Alertas Klasse die Nachricht Fein anzuzeigen und zeigt sie in ihrer Tätigkeit wird analysieren, aber werde das nur einmal tun. Wenn mehr als zwei Warnungen zum Lesen gestapelt sind, wird nur eine verarbeitet. Wenn es einen gibt, funktioniert es in Ordnung. Tut mir leid, wenn ich nicht besser erklären kann, aber es ist schwer, nicht den ganzen Code zu zeigen. Danke!

Antwort

1

Versuchen mit dem Schreiben Sie diese Zeile

notificationManager.notify(new Random().nextInt(), notification); 

statt

notificationManager.notify(0, notification); 

Ihre Mitteilung ID ist jedes Mal gleich, so die letzte Meldung nur funktionieren. Jede neue Benachrichtigungs-ID wird durch ID 0 ersetzt. Daher verwende ich eine zufällige ID anstelle einer festen ID 0. Ich denke, dass der obige Code für Sie funktioniert

Verwandte Themen