0

我正在使用 AlramManager 使用以下方法设置警报:

    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);

Whwre lefttime 我得到了正确的..正好在 17000 或 20000 左右,即;大约 20 秒但我的警报立即触发,无需等待 20 秒。

帮助请.. 提前致谢

4

2 回答 2

0

好的,我得到了答案...逻辑是正确的,只是我的日期减法传递了一个负值 long,我试图将其添加到 Calendar.getInstance().getCurrentTimeMillis...

于 2012-09-05T13:43:22.160 回答
0

最简单的解决方案是将时间存储在您在警报中设置的 Sharedprefernce / Database 中,并在您重新启动设备时再次设置该时间。

因此,您的警报会在您重新启动之前设置的确切时间调用。

在您当前的代码中尝试这个。

PendingIntent pendingIntent =PendingIntent.getBroadcast(context, 0, new Intent(context, AlarmReciever.class),0);
于 2012-09-05T11:19:02.960 回答