Android 安卓系统的警报过早响起

Android 安卓系统的警报过早响起,android,alarmmanager,android-alarms,Android,Alarmmanager,Android Alarms,我想设置特定时间的警报,我尝试了下面的代码。问题是,大部分时间警报都会在10秒内发出。我试着通过祝酒来体现时间的价值,这似乎很好 Calendar cur_cal = new GregorianCalendar(); cur_cal.setTimeInMillis(System.currentTimeMillis());//set the current time and date for this calendar Calendar cal = new GregorianCalendar()

我想设置特定时间的警报,我尝试了下面的代码。问题是,大部分时间警报都会在10秒内发出。我试着通过祝酒来体现时间的价值,这似乎很好

Calendar cur_cal = new GregorianCalendar();
cur_cal.setTimeInMillis(System.currentTimeMillis());//set the current time and date for this calendar

Calendar cal = new GregorianCalendar();
cal.add(Calendar.DAY_OF_YEAR, cur_cal.get(Calendar.DAY_OF_YEAR));
cal.set(Calendar.HOUR_OF_DAY, 1);
cal.set(Calendar.MINUTE, 54);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
cal.set(Calendar.DATE, cur_cal.get(Calendar.DATE));
cal.set(Calendar.MONTH, cur_cal.get(Calendar.MONTH));

long futureInMillis = SystemClock.elapsedRealtime() + delay;
long time = cal.getTimeInMillis()-(System.currentTimeMillis());

AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, time, (1000*60*60*24) , pendingIntent);

Toast.makeText(context, "alarm set for" + time, Toast.LENGTH_SHORT).show();
我也试过,

alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, time, pendingIntent);
而且

以及


正如我理解你的问题(“我想设置一个特定时间的闹钟”),你希望闹钟在明天上午10点响。但是,您的代码似乎与此语句相矛盾,因为您正在计算时差:

long time=cal.getTimeInMillis()-(System.currentTimeMillis())

您还可能遇到
AlarmManager
使用
setRepeating()
方法时出现的问题。Android文档说:

注:自API 19起,所有重复报警均不准确。如果你的 应用程序需要精确的交付时间,然后必须使用一次性交付 准确的警报,按上述每次重新安排。遗产 targetSdkVersion早于API 19的应用程序将 继续保持所有警报,包括重复警报, 被视为精确的

因此,如果您确实想为特定时间(而不是时差)设置警报,请尝试以下方法:

long time=cal.getTimeInMillis()

您还可以考虑更改为<代码> SETAc精确()/<代码>方法,并根据需要创建代码重复(Internet上有示例)。p> 链接到Android文档:


你所说的爆炸到底是什么意思?@Rahulrr2602 it firer,或者你可以说它发出通知。我尝试了
cal.getTimeInMillis()
但没有任何改进。我还尝试了setExact()。但问题是存在的。我想知道为什么报警触发得这么早,而
时间正好是我希望报警从当前时间延迟的程度。在您更新的帖子中,您显示您“也尝试过”
alarmManager.set()
,这与
alarmManager.setExact()
不同。请你详细解释一下你想要发生什么,以及到底发生了什么。我不明白“我想知道为什么闹钟这么早响”——你说的“早”(秒,分钟)是什么意思?
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 24*60*60*1000, pendingIntent);
alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pendingIntent);