繁体   English   中英

多个通知未在android中显示

[英]Multiple Notifications not showing in android

在我的 android 应用程序中,我愿意在特定的一天显示多个通知,为此我使用警报管理器和广播接收器的问题是当我使用警报时它工作正常但是当我添加通知构建器以显示通知时它不起作用

这是我的主要活动

  public static final String ACTION_ONE = "Hello, Test Message 1";
public static final String ACTION_TWO = "Hello, Test Message 2";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    AlarmManager alarmManager1 = (AlarmManager) getSystemService(ALARM_SERVICE);
    Calendar cal = Calendar.getInstance();
    cal.setTimeInMillis(System.currentTimeMillis());

    Intent myIntent1 = new Intent(this, AlarmBroadCustReciver.class);
    myIntent1.setAction(ACTION_ONE);
    PendingIntent pendingIntent1 = PendingIntent.getBroadcast(this, 1253, myIntent1,
            PendingIntent.FLAG_UPDATE_CURRENT);
    // Set the time for first alarm here
    cal.set(2015, 10, 20, 15, 55);
    alarmManager1.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pendingIntent1);

    Intent myIntent2 = new Intent(this, AlarmBroadCustReciver.class);
    myIntent2.setAction(ACTION_TWO);
    PendingIntent pendingIntent2 = PendingIntent.getBroadcast(this, 1263, myIntent2,
            PendingIntent.FLAG_UPDATE_CURRENT);
    // Set the time for second alarm here
    cal.set(2015, 10, 20, 15, 56);
    alarmManager1.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pendingIntent2);
    // In this way set time for all the rest of the alarms

这是广播接收器

public class AlarmBroadCustReciver extends BroadcastReceiver {

public static final String ACTION_ONE = "Hello, welcome to the Server1";
public static final String ACTION_TWO = "Hello, welcome to the Server2";

@Override
public void onReceive(Context context, Intent intent) {
    NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
    NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
    builder.setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.mipmap.ic_launcher));
    builder.setContentTitle(context.getString(R.string.app_name));
    if (intent.getAction().equalsIgnoreCase(ACTION_ONE)) {
        builder.setContentText("Alarm one");
    } else {
        builder.setContentText("Alarm two");
    }
    Notification notification = builder.build();
    int notificationID = 0;
    notificationManager.notify(notificationID, notification);

您需要为每个 Notification 传递不同的通知 ID。 如果您传递相同的 id(即在您的情况下为 0),则现有通知将使用新数据进行更新。 更改通知 ID:例如有一个变量并增加它。 通知ID++

我有一个类似的问题,我创建了多个具有不同 ID 的通知,但是,当我单击一个通知时,只有第一个打开特定屏幕,所有顺序通知都被忽略(单击它们没有任何作用,它们是刚刚被解雇)。 然后我尝试这样做:

intent.setAction(context.getPackageName() + "." + notificationId);

这意味着每个独特的通知也带有自己独特的 Intent,在这种情况下,Intent 不会被忽略,并且每个通知都打开了所需的屏幕。 我必须注意我的意图是相同的(例如 NoteDetails.class),所以我想我不得不以某种方式将它们分开......我很高兴它无论如何都能工作。

Box 的回答对我来说是一个正确的方向。

我只需要更改传递给 AlarmManager 的 PendingIntent 中的 requestCode,因此它不是相同的值。

旧代码:

PendingIntent pI = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

新代码:

PendingIntent pI = PendingIntent.getBroadcast(context, notificationId, intent, PendingIntent.FLAG_UPDATE_CURRENT);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM