如何避免为AlarmManager设置唯一ID?

3

我正在使用这段代码启动闹钟。

该闹钟是在用户可以启动的活动中设置的。

//Setting alarm to fire off NEW_GAME intent every 24 hours.
            String alarm = Context.ALARM_SERVICE;
            Calendar calendar = Calendar.getInstance();

            calendar.set(Calendar.HOUR_OF_DAY, 8);
            calendar.set(Calendar.MINUTE, 0);
            calendar.set(Calendar.SECOND,0);
            calendar.set(Calendar.MILLISECOND, 0);

             Log.i("Test", "Current time: " + System.currentTimeMillis() );
                Log.i("Test", "Calendar time: " + calendar.getTimeInMillis() );

                int currentDate = calendar.get(Calendar.DATE);
                calendar.set(Calendar.DATE, currentDate+1);

                Log.i("Test", "Calendar time with a day added: " + calendar.getTimeInMillis() );


            AlarmManager am = (AlarmManager)getActivity().getSystemService(alarm);
                Intent intent = new Intent("NEW_ITEM");
                PendingIntent sender = PendingIntent.getBroadcast(getActivity(), 0, intent, 0);

                am.setRepeating(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis() , AlarmManager.INTERVAL_DAY, sender);

我被告知需要在getBroadcast()中提供一个唯一的ID,以避免闹钟相互覆盖。

问题是,当用户想要打开Activity多次时,我该如何做呢?

另外,如果每次提供一个唯一的ID,这可能会导致设置5个相同的ALARMS。

如何或者说什么是最好的方法来解决这个问题呢?

1个回答

5

您可以始终使用目标时间的 Unix 时间戳作为唯一 ID。这样,准确时间的警报将会覆盖彼此,而所有其他警报将保持独立。

[编辑:] 这里是一些示例代码:

AlarmManager am = (AlarmManager)getActivity().getSystemService(alarm);
            Intent intent = new Intent(String.valueOf(calendar.getTimeInMillis()));
            PendingIntent sender = PendingIntent.getBroadcast(getActivity(), 0, intent, 0);
            am.setRepeating(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis() , AlarmManager.INTERVAL_DAY, sender);

你能提供一下如何在我上面的代码中实现这个功能的指导吗? - yoshi24
你能提供一个例子吗? - yoshi24

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接