Android 警报是在今天上午12点而不是48小时后发出的

Android 警报是在今天上午12点而不是48小时后发出的,android,android-alarms,Android,Android Alarms,每48小时(即两天)后,我会在午夜12点鸣响闹钟 这是我的密码 Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(System.currentTimeMillis()); calendar.set(Calendar.HOUR, 12); // MIDNIGHT 12 AM calendar.set(Calenda

每48小时(即两天)后,我会在午夜12点鸣响闹钟

这是我的密码

            Calendar calendar = Calendar.getInstance();
            calendar.setTimeInMillis(System.currentTimeMillis());
            calendar.set(Calendar.HOUR,  12); // MIDNIGHT 12 AM
            calendar.set(Calendar.MINUTE,00);
            calendar.set(Calendar.SECOND, 00);

            calendar.getTime().toString();

            dayAlarmMgr.setRepeating(
                    AlarmManager.RTC_WAKEUP, 
                    calendar.getTimeInMillis(),
                    AlarmManager.INTERVAL_DAY * 2,  // EVERY TWO DAYS
                    dayAlarmIntent);
现在,当我运行应用程序时,我的警报在今天上午12点发出,但根据要求,它应该在48小时后发出


那么我怎样才能让它在48小时后在凌晨12点着火呢

您需要在警报第一次响起之前再加上2天。您还应该使用Calendar.HOUR\u OF_DAY,因为它更直接

Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 0); // MIDNIGHT 12 AM
calendar.set(Calendar.MINUTE,00);
calendar.set(Calendar.SECOND, 00);

calendar.add(Calendar.HOUR_OF_DAY, 48);

dayAlarmMgr.setRepeating(
        AlarmManager.RTC_WAKEUP, 
        calendar.getTimeInMillis(),
        AlarmManager.INTERVAL_DAY * 2,  // EVERY TWO DAYS
        dayAlarmIntent);

你需要在闹钟第一次响起的时间上再加两天。您还应该使用Calendar.HOUR\u OF_DAY,因为它更直接

Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 0); // MIDNIGHT 12 AM
calendar.set(Calendar.MINUTE,00);
calendar.set(Calendar.SECOND, 00);

calendar.add(Calendar.HOUR_OF_DAY, 48);

dayAlarmMgr.setRepeating(
        AlarmManager.RTC_WAKEUP, 
        calendar.getTimeInMillis(),
        AlarmManager.INTERVAL_DAY * 2,  // EVERY TWO DAYS
        dayAlarmIntent);

0点是午夜。12是noon.calendar.add calendar.HOUR,48;不是吗?calendar.getTimeInMillis就是这样做的,它是初始触发时间。@kevskree:HOUR没有指定AM或PM,所以它取决于当前时间,除非奇怪的AM/PM约定指定0始终是午夜,但我的印象是午夜是12AM小时0是午夜。12是noon.calendar.add calendar.HOUR,48;不是吗?calendar.getTimeInMillis就是这样做的,它是初始触发时间。@kevskree:HOUR没有指定AM或PM,所以它取决于当前时间,除非奇怪的AM/PM约定指定0总是午夜,但我的印象是午夜是12Am。你能解释一下calendar.addCalendar.HOUR吗,48请?日历设置为48小时2天。这确保了闹钟第一次响是两天后的午夜。好的,还有一件事,我正在android.intent.action.BOOT_中设置此警报,每当用户从现在开始重新启动设备时,此警报就会完成。但是setRepeating中的2参数不是说警报应该首先发出的时间吗?官方文档中说警报应该首先发出的时间(以毫秒为单位),使用合适的时钟。您能解释一下calendar.addCalendar.HOUR OF_DAY,48吗?它将日历设置为48小时2天。这确保了闹钟第一次响是两天后的午夜。好的,还有一件事,我正在android.intent.action.BOOT_中设置此闹钟,每当用户从现在开始重新启动设备时,此闹钟就完成了。但是setRepeating中的2参数不是说闹钟第一次响的时间吗?官方文档中说,闹钟第一次响的时间以毫秒为单位,使用适当的时钟。