我正在使用AlramManager来使用以下方法设置setAlarm:
public static void scheduleAlarmReceiverOnce(Context context,String did,long time) {
AlarmManager alarmMgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
PendingIntent pendingIntent =PendingIntent.getBroadcast(context, 0, new Intent(context, AlarmReciever.class),PendingIntent.FLAG_CANCEL_CURRENT);
alarmMgr.set(AlarmManager.RTC_WAKEUP,time, pendingIntent);
}
我在这里打电话
Utils.scheduleAlarmReceiverOnce(this, did,Calendar.getInstance().getTimeInMillis()+30000);
它的工作正常意味着闹钟正好在我的广播中正好显示,我正在显示一个完全显示在30秒的吐司。 我的问题是当我重新启动或重新安装时,我正在计算并减去浪费的时间并再次安排警报,但是剩下的时间......我的启动接收器我再次启动服务,重新安排警报。
Utils.scheduleAlarmReceiverOnce(this, did,Calendar.getInstance().getTimeInMillis()+leftime);
我正确地离开的时间......正好在17000或20000左右,e;大约20秒 但我的警报会立即触发,而不会等待20秒..
帮助PLZ .. 在此先感谢
答案 0 :(得分:0)
最简单的解决方案是在您设置为闹钟的Sharedprefernce / Database中存储时间,并在重新启动设备时再次设置该时间。
因此,您在重启前设置的确切时间会调用警报。
在您当前的代码中尝试使用此功能。
PendingIntent pendingIntent =PendingIntent.getBroadcast(context, 0, new Intent(context, AlarmReciever.class),0);
答案 1 :(得分:0)
Okk我得到了答案...逻辑是正确的只是我的日期减法传递了一个负值,我试图添加到Calendar.getInstance()。getCurrentTimeMillis ...