当前位置: 首页 > 知识库问答 >
问题:

在Android Studio中显示多个每日重复通知

申屠锦
2023-03-14

在我的应用程序中,我想根据用户的需要显示任意数量的每日通知(这是一种医疗提醒)。用户还设置新通知的时间。但我的应用程序目前只显示一个最新通知。你能帮我解决这个问题吗?

我创建新通知的代码(set小时等由用户预先设置):

Calendar calendar = Calendar.getInstance();
                    calendar.set(Calendar.HOUR_OF_DAY, setHour);
                    calendar.set(Calendar.MINUTE, setMinute);
                    calendar.set(Calendar.SECOND, 0);
                    Intent intent1 = new Intent(ReminderActivity.this, AlarmReceiver.class);
                    PendingIntent pendingIntent = PendingIntent.getBroadcast(ReminderActivity.this, MID,intent1, 0);
                    AlarmManager am = (AlarmManager) ReminderActivity.this.getSystemService(ReminderActivity.this.ALARM_SERVICE);
                    am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent);

和我的AlarmReceiver:

public class AlarmReceiver extends BroadcastReceiver {
    public static int MID = 0;
    private static final String CHANNEL_ID = "this.is.my.channelId";
    @Override
    public void onReceive(Context context, Intent intent) {
        Intent notificationIntent = new Intent(context, MainActivity.class);

        TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
        stackBuilder.addParentStack(MainActivity.class);
        stackBuilder.addNextIntent(notificationIntent);

        PendingIntent pendingIntent = stackBuilder.getPendingIntent(MID, 0);

        Notification.Builder builder = new Notification.Builder(context);

        Notification notification = builder.setContentTitle("Notification")
                .setContentText("New Notification")
                .setTicker("New Message Alert!")
                .setSmallIcon(R.mipmap.ic_launcher)
                .setVibrate(new long[]{1000, 1000, 1000, 1000, 1000})
                .setContentIntent(pendingIntent).build();

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            builder.setChannelId(CHANNEL_ID);
        }

        NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
//below creating notification channel, because of androids latest update, O is Oreo
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            NotificationChannel channel = new NotificationChannel(
                    CHANNEL_ID,
                    "NotificationDemo",
                    NotificationManager.IMPORTANCE_DEFAULT
            );
            notificationManager.createNotificationChannel(channel);
        }

        notificationManager.notify(MID, notification);
        MID++;
    }
}

共有1个答案

邢飞昂
2023-03-14

在此处创建挂起内容时

PendingIntent pendingIntent = PendingIntent.getBroadcast(ReminderActivity.this, MID,intent1, 0);

请检查您没有传递相同的请求代码。在这种情况下,Android“重用”了之前创建的挂起的意图,这就是为什么您只会看到最新的通知,而不会看到多个通知。

避免该问题的最简单方法似乎是传递不同的请求代码(或其他参数,例如differentsetAction(…) -请参阅下面的链接)以获取每种类型的通知。

有关更多信息,请查看Android如何比较待定意图:https://stackoverflow.com/a/20205696/2219237

 类似资料:
  • 我知道以前有人问过这个问题,但那篇文章中的解决方案对我不起作用。 我刚刚开始学习Android编程,当时正在做一个模型。它可以在Android Studio中正确显示,但不能在我的设备上显示。图像和背景色显示正确,但没有文本显示。我试过改变字体和字体颜色。需要改变什么? 我有另一个使用RelativeLayout的示例,它显示正确,但这个ConstraintLayout不正确。 第一个图像来自AS

  • 我想通过javascript在html页面上显示当前日期。我试过了,但它在eclips浏览器中显示了currect日期,但在其他浏览器中没有显示currect日期,比如Chrome,Mozilla Firfox。你能帮我做这件事吗。.我的Java剧本是这样的。.

  • 这是我的项的代码。问题是,每个项目都显示在一整页的应用程序中。请帮我解决这个问题:

  • 通知通道的新代码在旧的和最新的奥利奥设备上运行良好,但当我在API 28(android P)设备上测试时,它没有在通知栏中显示通知,这是我用来启动前台通知的行。

  • 我需要根据日期对列进行分组。 我使用下面的内容将我的开始时间列拆分为日期和时间。我想在COUNT栏中计算每个日期的发生次数。 例如 我该怎么做?

  • 我正在使用一个警报对话框,显示一个菜单在应用程序的开始,我想要对话框显示我的两个值,是“名称”从一个对象,这里是警报对话框的代码: 是包含字符串“name”的对象,包含数组