AlarmManager 立即启动警报
AlarmManager start Alarm Instantly
我创建了一个表单,用户可以在其中指定日期和时间并添加警报。我使用这些日期和时间并使用 AlarmManager
创建警报。
问题是我一点击 CreateRemainder
按钮,警报就被触发了
我正在使用以下方法将日期、时间值传递给 AlarmManager
class。
int year= Integer.parseInt(splitDate[0]);
int month= Integer.parseInt(splitDate[1]);
int day= Integer.parseInt(splitDate[2]);
int hour= Integer.parseInt(splitTime[0]);
int minute= Integer.parseInt(splitTime[1]);
int second= 0;
Calendar cal = Calendar.getInstance(TimeZone.getDefault(), Locale.getDefault());
cal.set(Calendar.DATE,day); //1-31
cal.set(Calendar.MONTH,month-1); //first month is 0!!! January is zero!!!
cal.set(Calendar.YEAR,year);//year...
cal.set(Calendar.HOUR_OF_DAY, hour); //HOUR
cal.set(Calendar.MINUTE, minute); //MIN
cal.set(Calendar.SECOND, second);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pendingIntent);
我调试了它并获得了正确的值,但它立即启动警报。
如果我将 AlarmManager
时间更改为硬编码的 10 秒时间,它会在 10 秒后开始余数。
alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + (10 * 1000), pendingIntent);
但是如果我在日历上添加 10 秒,它仍然会在设置后立即开始显示闹钟。
alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis()+10000, pendingIntent);
使用这个:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
alarmManager.setExact(AlarmManager.RTC, cal.getTimeInMillis(), pendingIntent);
} else {
alarmManager.set(AlarmManager.RTC, cal.getTimeInMillis(), pendingIntent);
}
如果你的闹钟是立即响起的,那么我猜你的 cal
日期早于今天。
通常,如果警报在您设置后立即触发,则意味着预定时间晚于当前时间...因此,AlarmManager 会立即触发
我建议添加调试消息进行调试。类似于:
Log.d("DEBUG", "Time from device: " + Calendar.getInstance().getTimeInMillis() + " Time passed to alarm: " + cal.getTimeInMillis());
然后,您可以查看 Current Millis 网站并检查两个时间是否正确.. 检查 cal 是否真的是未来日期
另外,如果你想在日历中添加时间,使用如下Calendar.add()
方法:
Calendar cal = Calendar.getInstance();
cal.add(Calendar.SECOND, 10);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pendingIntent);
我创建了一个表单,用户可以在其中指定日期和时间并添加警报。我使用这些日期和时间并使用 AlarmManager
创建警报。
问题是我一点击 CreateRemainder
按钮,警报就被触发了
我正在使用以下方法将日期、时间值传递给 AlarmManager
class。
int year= Integer.parseInt(splitDate[0]);
int month= Integer.parseInt(splitDate[1]);
int day= Integer.parseInt(splitDate[2]);
int hour= Integer.parseInt(splitTime[0]);
int minute= Integer.parseInt(splitTime[1]);
int second= 0;
Calendar cal = Calendar.getInstance(TimeZone.getDefault(), Locale.getDefault());
cal.set(Calendar.DATE,day); //1-31
cal.set(Calendar.MONTH,month-1); //first month is 0!!! January is zero!!!
cal.set(Calendar.YEAR,year);//year...
cal.set(Calendar.HOUR_OF_DAY, hour); //HOUR
cal.set(Calendar.MINUTE, minute); //MIN
cal.set(Calendar.SECOND, second);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pendingIntent);
我调试了它并获得了正确的值,但它立即启动警报。
如果我将 AlarmManager
时间更改为硬编码的 10 秒时间,它会在 10 秒后开始余数。
alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + (10 * 1000), pendingIntent);
但是如果我在日历上添加 10 秒,它仍然会在设置后立即开始显示闹钟。
alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis()+10000, pendingIntent);
使用这个:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
alarmManager.setExact(AlarmManager.RTC, cal.getTimeInMillis(), pendingIntent);
} else {
alarmManager.set(AlarmManager.RTC, cal.getTimeInMillis(), pendingIntent);
}
如果你的闹钟是立即响起的,那么我猜你的 cal
日期早于今天。
通常,如果警报在您设置后立即触发,则意味着预定时间晚于当前时间...因此,AlarmManager 会立即触发
我建议添加调试消息进行调试。类似于:
Log.d("DEBUG", "Time from device: " + Calendar.getInstance().getTimeInMillis() + " Time passed to alarm: " + cal.getTimeInMillis());
然后,您可以查看 Current Millis 网站并检查两个时间是否正确.. 检查 cal 是否真的是未来日期
另外,如果你想在日历中添加时间,使用如下Calendar.add()
方法:
Calendar cal = Calendar.getInstance();
cal.add(Calendar.SECOND, 10);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pendingIntent);