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);

有人告诉我我需要提供一个唯一的 id,这样警报就不会在 getBroadcast() 所在的位置相互覆盖。

问题是当用户可以根据需要多次打开 Activity 时,我该怎么做?

此外,如果我每次都提供一个唯一 ID,这意味着它可能会因为唯一 ID 而设置 5 个相同的警报。

如何或最好的方法是解决这个问题?

4

1 回答 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);
于 2011-10-07T15:27:29.480 回答