it-swarm.com.de

So zeigen Sie mehrere Benachrichtigungen in Android an

Ich erhalte nur eine Benachrichtigung und wenn es eine weitere Benachrichtigung gibt, wird die vorherige Benachrichtigung ersetzt

private static void generateNotification(Context context, String message,
        String key) {
    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,
            FragmentOpenActivity.class);
    notificationIntent.putExtra(key, key);
    // 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;

    notification.defaults |= Notification.DEFAULT_SOUND;

    // notification.sound = Uri.parse("Android.resource://" +
    // context.getPackageName() + "your_sound_file_name.mp3");
    notification.defaults |= Notification.DEFAULT_VIBRATE;
    notificationManager.notify(0, notification);

}
83
Kartheek s

Ich habe mein Problem so gelöst ...

/**
     * Issues a notification to inform the user that server has sent a message.
     */
    private static void generateNotification(Context context, String message,
            String keys, String msgId, String branchId) {
        int icon = R.drawable.ic_launcher;
        long when = System.currentTimeMillis();
        NotificationCompat.Builder nBuilder;
        Uri alarmSound = RingtoneManager
                .getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
        nBuilder = new NotificationCompat.Builder(context)
                .setSmallIcon(R.drawable.ic_launcher)
                .setContentTitle("Smart Share - " + keys)
                .setLights(Color.BLUE, 500, 500).setContentText(message)
                .setAutoCancel(true).setTicker("Notification from smartshare")
                .setVibrate(new long[] { 100, 250, 100, 250, 100, 250 })
                .setSound(alarmSound);
        String consumerid = null;
        Integer position = null;
        Intent resultIntent = null;
        if (consumerid != null) {
            if (msgId != null && !msgId.equalsIgnoreCase("")) {
                if (key != null && key.equalsIgnoreCase("Yo! Matter")) {
                    ViewYoDataBase db_yo = new ViewYoDataBase(context);
                    position = db_yo.getPosition(msgId);
                    if (position != null) {
                        resultIntent = new Intent(context,
                                YoDetailActivity.class);
                        resultIntent.putExtra("id", Integer.parseInt(msgId));
                        resultIntent.putExtra("position", position);
                        resultIntent.putExtra("notRefresh", "notRefresh");
                    } else {
                        resultIntent = new Intent(context,
                                FragmentChangeActivity.class);
                        resultIntent.putExtra(key, key);
                    }
                } else if (key != null && key.equalsIgnoreCase("Message")) {
                    resultIntent = new Intent(context,
                            FragmentChangeActivity.class);
                    resultIntent.putExtra(key, key);
                }.
.
.
.
.
.
            } else {
                resultIntent = new Intent(context, FragmentChangeActivity.class);
                resultIntent.putExtra(key, key);
            }
        } else {
            resultIntent = new Intent(context, MainLoginSignUpActivity.class);
        }
        PendingIntent resultPendingIntent = PendingIntent.getActivity(context,
                notify_no, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT);
        if (notify_no < 9) {
            notify_no = notify_no + 1;
        } else {
            notify_no = 0;
        }
        nBuilder.setContentIntent(resultPendingIntent);
        NotificationManager nNotifyMgr = (NotificationManager) context
                .getSystemService(context.NOTIFICATION_SERVICE);
        nNotifyMgr.notify(notify_no + 2, nBuilder.build());
    }
3
Kartheek s

ersetzen Sie einfach Ihre Zeile damit 

 notificationManager.notify(Unique_Integer_Number, notification);

hoffe es wird dir helfen.

109
Andrain

Einfache notification_id muss änderbar sein.

Erstellen Sie einfach eine Zufallszahl für notification_id.

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

oder Sie können diese Methode zum Erstellen einer Zufallszahl verwenden, wie von Tieorange mitgeteilt (dies wird nie wiederholt):

    int m = (int) ((new Date().getTime() / 1000L) % Integer.MAX_VALUE);

und ersetzen Sie diese Zeile, um Parameter für die Benachrichtigungs-ID hinzuzufügen, um eine Zufallszahl zu generieren

    notificationManager.notify(m, notification);
66
sagar.android

Die Verwendung gemeinsamer Einstellungen hat für mich funktioniert

SharedPreferences prefs = getSharedPreferences(Activity.class.getSimpleName(), Context.MODE_PRIVATE);
int notificationNumber = prefs.getInt("notificationNumber", 0);
...

notificationManager.notify(notificationNumber , notification);
SharedPreferences.Editor editor = prefs.edit();
notificationNumber++;
editor.putInt("notificationNumber", notificationNumber);
editor.commit();
27
vLopez

Ersetzen Sie Ihre Zeile damit.

notificationManager.notify((int) ((new Date().getTime() / 1000L) % Integer.MAX_VALUE), notification);
8
Tony Baby

ich denke, das wird jemandem helfen ..
In dem folgenden Code ist "not_nu" ein zufälliges int. PendingIntent und Notification haben die gleiche ID .. Damit bei jedem Benachrichtigungsklick die Absicht auf eine andere Aktivität verweist. 

private void sendNotification(String message,String title,JSONObject extras) throws JSONException {
   String id = extras.getString("actionParam");
    Log.e("gcm","id  = "+id);
    Intent intent = new Intent(this, OrderDetailActivty.class);
    intent.putExtra("id", id);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    final int not_nu=generateRandom();
    PendingIntent pendingIntent = PendingIntent.getActivity(this, not_nu /* Request code */, intent,
            PendingIntent.FLAG_ONE_SHOT);

    Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
            .setSmallIcon(R.mipmap.ic_cart_red)
            .setContentTitle(title)
            .setContentText(message)
            .setAutoCancel(true)
            .setSound(defaultSoundUri)
            .setContentIntent(pendingIntent);

    NotificationManager notificationManager =
            (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

    notificationManager.notify(not_nu /* ID of notification */, notificationBuilder.build());
}
public int generateRandom(){
    Random random = new Random();
    return random.nextInt(9999 - 1000) + 1000;
}
8
Muneef M

Geben Sie an der Stelle von uniqueIntNo eine eindeutige Ganzzahl wie folgt ein: 

mNotificationManager.notify(uniqueIntNo, builder.build());
5
Sachin Singh

Sie müssen jeder Benachrichtigung eine eindeutige ID hinzufügen, damit sie nicht miteinander kombiniert werden. Sie können diesen Link als Referenz verwenden: 

https://github.com/sanathe06/AndroidGuide/tree/master/ExampleCompatNotificationBuilder

3
arshu

Eine andere Möglichkeit besteht darin, das aktuelle Datum in lange umzuwandeln, nur die letzten 4 Ziffern. Es besteht eine hohe Wahrscheinlichkeit, dass die Anzahl eindeutig ist.

    long time = new Date().getTime();
    String tmpStr = String.valueOf(time);
    String last4Str = tmpStr.substring(tmpStr.length() -5);
    int notificationId = Integer.valueOf(last4Str);
3
Vidyadhara

Sie müssen nur Ihre einzeilige Nummer von notificationManager.notify(0, notification); in notificationManager.notify((int) System.currentTimeMillis(), notification);... ändern.

Dies ändert die ID der Benachrichtigung, wenn die neue Benachrichtigung angezeigt wird

0
Arun Sriramula
notificationManager.notify(0, notification);
putthis new Random().nextInt() in position of 0
like below it works for me
notificationManager.notify(new Random().nextInt(), notification);
0

Nachfolgend finden Sie den Code für die eindeutige ID-Benachrichtigung:

//"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.

Setzen Sie die notificationId in SavedPreferences in einem bestimmten Bereich zurück, so wie ich es bei 1000 gemacht habe. Damit werden in Zukunft keine Probleme mehr erzeugt. :)

0
Gaurav Darji

Das Problem liegt bei Ihrer notificationId. Betrachten Sie es als einen Array-Index. Jedes Mal, wenn Sie Ihre Benachrichtigung aktualisieren, ist notificationId der Ort, an dem der Wert gespeichert wird. Da Sie Ihren int-Wert nicht erhöhen (in diesem Fall Ihre notificationId), ersetzt dies immer den vorherigen Wert. Ich denke, die beste Lösung besteht darin, sie unmittelbar nach dem Aktualisieren einer Benachrichtigung inkrementieren zu lassen. Wenn Sie es dauerhaft beibehalten möchten, können Sie den Wert Ihrer notificationId in sharedPreferences speichern. Wann immer Sie zurückkommen, können Sie einfach den letzten ganzzahligen Wert (notificationId, gespeichert in sharedPreferences) abrufen und verwenden.

0
androCoder-BD

Verwenden Sie die folgende Methode in Ihrem Code.

Methodenaufruf: -

notificationManager.notify(getCurrentNotificationId(getApplicationContext()), notification);

Methode:- 

  *Returns a unique notification id.
         */

        public static int getCurrentNotificationId(Context iContext){

            NOTIFICATION_ID_UPPER_LIMIT = 30000; // Arbitrary number.

            NOTIFICATION_ID_LOWER_LIMIT = 0;
            SharedPreferences sharedPreferences       = PreferenceManager.getDefaultSharedPreferences(iContext);
        int previousTokenId                       = sharedPreferences.getInt("currentNotificationTokenId", 0);

        int currentTokenId                        = previousTokenId+1;

        SharedPreferences.Editor editor           = sharedPreferences.edit();

        if(currentTokenId<NOTIFICATION_ID_UPPER_LIMIT) {

            editor.putInt("currentNotificationTokenId", currentTokenId); // }
        }else{
            //If reaches the limit reset to lower limit..
            editor.putInt("currentNotificationTokenId", NOTIFICATION_ID_LOWER_LIMIT);
        }

        editor.commit();

        return currentTokenId;
    }