Android 以正确的方式设置警报
我正在使用API获取Android应用程序的电影版本,发布日期以UTC毫秒为单位。当我把发布日期设定在用户的手机上时,它会在他的时区转换并被呼叫 示例: 电影的发行日期(毫秒): 1509667200000 到UTC时间和日期: 2017年11月3日星期五00:00:00 至当地时间和日期:(东部时间,我的时区) 2017年11月2日星期四20:00:00 当我设置闹钟时Android 以正确的方式设置警报,android,alarmmanager,Android,Alarmmanager,我正在使用API获取Android应用程序的电影版本,发布日期以UTC毫秒为单位。当我把发布日期设定在用户的手机上时,它会在他的时区转换并被呼叫 示例: 电影的发行日期(毫秒): 1509667200000 到UTC时间和日期: 2017年11月3日星期五00:00:00 至当地时间和日期:(东部时间,我的时区) 2017年11月2日星期四20:00:00 当我设置闹钟时 Calendar calendar = Calendar.getInstance(); calendar.s
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(releaseDate);
Date date = calendar.getTime();
alarmManager.set(AlarmManager.RTC_WAKEUP, date.getTime(), alarmIntent);
警报会在2017年11月2日20:00:00被调用,但它需要在11月3日午夜被调用
谢谢您能试着将时区设置为UTC吗
calendar.setTimeZone(TimeZone.getTimeZone("UTC"));
我所做的和现在它完美地工作:
// Calendar
TimeZone timeZone = TimeZone.getTimeZone("UTC");
Calendar calendar = Calendar.getInstance(timeZone);
calendar.setTimeInMillis(releaseDate);
Date date = calendar.getTime();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
alarmManager.setExact(AlarmManager.RTC_WAKEUP, date.getTime(), pendingIntent);
} else {
alarmManager.set(AlarmManager.RTC_WAKEUP, date.getTime(), pendingIntent);
}
我已经工作了好几天了。 我已经完成了学校课程表的报警模块。 我所做的是
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
Calendar calNow = Calendar.getInstance();
Calendar calSet = (Calendar) calNow.clone();
calSet.set(Calendar.HOUR_OF_DAY, hourOfDay);
calSet.set(Calendar.MINUTE, minute);
calSet.set(Calendar.SECOND, 0);
calSet.set(Calendar.MILLISECOND, 0);
if(calSet.compareTo(calNow) <= 0){
//Today Set time passed, count to tomorrow
calSet.add(Calendar.DATE, 1);
}
setAlarm(calSet);
}};
private void setAlarm(Calendar targetCal){
textAlarmPrompt.setText(
"\n\n***\n"
+ "Alarm is set@ " + targetCal.getTime() + "\n"
+ "***\n");
Intent intent = new Intent(getBaseContext(), AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(), RQS_1, intent, 0);
AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
// alarmManager.set(AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis(), pendingIntent);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis(),AlarmManager.INTERVAL_DAY, pendingIntent);
}
@覆盖
时间集上的公共void(时间选择器视图,整数小时日,整数分钟){
Calendar calNow=Calendar.getInstance();
Calendar calSet=(Calendar)calNow.clone();
calSet.set(日历小时/天,小时/天);
calSet.set(Calendar.MINUTE,MINUTE);
calSet.set(日历秒,0);
calSet.set(日历毫秒,0);
如果(calSet.compareTo)(calNow),我认为您应该使用setExact()
而不是set()
来处理alarmManager
。查看此文档您是否在没有timeZone
的情况下尝试过?是的,结果相同