AlarmManager多次启动

时间:2011-10-06 22:25:45

标签: android

我正在使用此代码在可由用户启动的活动中创建警报。

警报发送一个意图,启动广播接收者,然后启动服务。

private void setGameAlerts(){
                //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);



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

                     Log.e("RELEASE LIST", "ALARM Set For 1 day from " + calendar.getTimeInMillis());

由于某种原因EVERYTIME活动启动它自动发送此意图并启动服务。我的代码有什么问题导致这种情况发生,而不是每天晚上8点发出警报吗?

1 个答案:

答案 0 :(得分:2)

在我看来,就像你今天早上8点设定它,而不是明天早上8点。例如,如果我运行此代码:

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

    calendar.add(Calendar.DATE, 1);

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

我得到了结果:

10-06 23:26:50.050: INFO/Test(8890): Current time: 1317968810056
10-06 23:26:50.050: INFO/Test(8890): Calendar time: 1317913200000
10-06 23:26:50.050: INFO/Test(8890): Calendar time with a day added: 1317999600000

日历时间是一个小于当前时间的数字,因此该日历条目是过去的。 Android可能会立即发送已经过去的事件的意图。如果您向其添加一天,或在Calendar对象中指定日期,它应该可以正常工作。

请注意,此数字日期只是添加毫秒的标准Unix时间。如果您删除最后三位数字并将数字放入a Unix time converter,您将能够检查您正在使用的数字是否有意义。例如:使用1317999600和Unix time converter,你将在东部标准时间上午10点(太平洋标准时间早上8点)(我的时区)。

我希望有所帮助!