调用取消后,Android AlarmService重复警报再次重复

时间:2013-05-27 20:35:13

标签: android

首先,这个网站很棒,每个人都非常乐于助人。这是我的第一篇文章,如果我有任何想法,请原谅我。

我像这样制作一个警报:

private void startLocation() {

    AlarmManager alarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);

    Intent i = new Intent(context, MyWeatherUpdateService.class);
    PendingIntent service = PendingIntent.getService(context, 0, i,
                PendingIntent.FLAG_CANCEL_CURRENT);

    alarm.setRepeating(AlarmManager.RTC, SystemClock.elapsedRealtime() + (60 * 1000),
            Long.parseLong(prefs.getString("listpref", "60000")), service);

}

在这个在片段内部调用的方法中,context来自getApplication(),listpref是一个字符串更新间隔,以毫秒为单位。

我取消它:

public void endLocation() {

    Intent i = new Intent(context, MyWeatherUpdateService.class);
    PendingIntent service = PendingIntent.getService(context, 0, i,
                PendingIntent.FLAG_CANCEL_CURRENT);
    alarm.cancel(service);

}

确保意图/未决意图相同。

现在我有两个问题:

1)警报在创建后几乎立即触发,即使我告诉它在1分钟后开始。 2)当我打电话取消时,警报再次触发警报。

问题1)警报为什么这么快就会发射?并且2)这是按预期工作还是应该像我想要的那样立即取消警报。

如果我没有提供足够的信息,请在需要时添加更多代码。

提前致谢。

1 个答案:

答案 0 :(得分:1)

  

警报在创建后几乎立即触发,即使我告诉它在1分钟后启动

这是因为您使用RTC的{​​{1}}开始时间。那些需要匹配。最简单的解决方案是切换到elapsedRealtime()

  

当我呼叫取消时,警报再次触发警报。

尝试将ELAPSED_REALTIME替换为PendingIntent.FLAG_CANCEL_CURRENT,至少在0的{​​{1}}电话中替换PendingIntent