11

Sto sviluppando un'applicazione in cui ho implementato la funzionalità Notifica push. Il mio codice di onMessage - GCMIntentService.java è:Android: gestire più notifiche push nel dispositivo di un'app

@Override 
protected void onMessage(Context context, Intent data) { 
    String message = data.getExtras().getString("message"); 

    displayMessage(context, message); 
    generateNotification(context, message); 
} 

e il codice del generateNotification -

private static void generateNotification(Context context, String message) { 
    int icon = R.drawable.ic_launcher; 
    long when = System.currentTimeMillis(); 
    NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
    Notification notification = new Notification(icon, message, when); 

    String title = context.getString(R.string.app_name); 

    Intent notificationIntent = new Intent(context, GCMMessageView.class); 

    notificationIntent.putExtra("message", message); 
    // set intent so it does not start a new activity 
    notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
    PendingIntent intent = PendingIntent.getActivity(context, 0,notificationIntent, 0); 

    notification.setLatestEventInfo(context, title, message, intent); 
    notification.flags |= Notification.FLAG_AUTO_CANCEL; 

    // Play default notification sound 
    notification.defaults |= Notification.DEFAULT_SOUND; 

    // Vibrate if vibrate is enabled 
    notification.defaults |= Notification.DEFAULT_VIBRATE; 
    notificationManager.notify(0, notification); 
} 

Questo codice sta lavorando bene. Ricevo messaggio push e notifica.

=> Ma quando invio più di un messaggio, la notifica supera la scrittura. E sono in grado di vedere solo l'ultima notifica nella barra di stato.

Il bisogno di applicazione è che - se io mando più poi uno notifica allora tutti dovrebbero essere visualizzazione nella barra di stato.

Quindi, per favore guidami cosa dovrei fare per quello nel mio codice.

risposta

7

provare a mettere diversi id notifica (cioè nid) negli intenti e notificare al posto di 0 per ogni nuova notifica questo impedirà oltre a scrivere il tuo notifica

PendingIntent intent = PendingIntent.getActivity(context, nid,notificationIntent, 0); 

e

notificationManager.notify(nid, notification);

Speranza questo ti aiuterà

1

Devi aggiornare il tuo Notification ID quando spari un Notification. in

notificationManager.notify(ID, notification); 

Come?

Per impostare una notifica in modo che possa essere diverso, problema con un ID di notifica chiamando NotificationManager.notify(ID, notification). Per cambiare questa notifica una volta l'hanno rilasciato, creare un oggetto NotificationCompat.Builder, costruire un oggetto Notification da esso e di rilascio il Notification con il Different ID non si è utilizzato in precedenza.

Se la notifica precedente è ancora visibile, il sistema lo aggiorna dal contenuto di Notification object. Se la notifica precedente è stata chiusa, viene invece creata una nuova notifica.

Per ulteriori informazioni, visitare ufficiali docs

2

ciao è necessario passare unica id notifica metodo di notifica. Di seguito è il codice per passaggio ID univoco di notifica:

//"CommonUtilities.getValudeFromOreference" is the method created by me to get value from savedPreferences. 
String notificationId = CommonUtilities.getValueFromPreference(context, Global.NOTIFICATION_ID, "0"); 
int notificationIdinInt = Integer.parseInt(notificationId); 

notificationManager.notify(notificationIdinInt, notification); 

// will increment notification id for uniqueness 
notificationIdinInt = notificationIdinInt + 1; 
CommonUtilities.saveValueToPreference(context, Global.NOTIFICATION_ID, notificationIdinInt + ""); 
//Above "CommonUtilities.saveValueToPreference" is the method created by me to save new value in savePreferences. 

fatemi sapere se avete bisogno di ulteriori informazioni di dettaglio o di qualsiasi richiesta.:)

1

ottenere numeri casuali:

Random random = new Random(); 
int m = random.nextInt(9999 - 1000) + 1000; 

Invece di:

notificationManager.notify(0, notification); 

uso:

notificationManager.notify(m, notification); 
0
notificationManager.notify(Different_id_everytime, notification);