首先,这个网站很棒,每个人都非常乐于助人。这是我的第一篇文章,如果我有任何想法,请原谅我。
我像这样制作一个警报:
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)这是按预期工作还是应该像我想要的那样立即取消警报。
如果我没有提供足够的信息,请在需要时添加更多代码。
提前致谢。
答案 0 :(得分:1)
警报在创建后几乎立即触发,即使我告诉它在1分钟后启动
这是因为您使用RTC
的{{1}}开始时间。那些需要匹配。最简单的解决方案是切换到elapsedRealtime()
。
当我呼叫取消时,警报再次触发警报。
尝试将ELAPSED_REALTIME
替换为PendingIntent.FLAG_CANCEL_CURRENT
,至少在0
的{{1}}电话中替换PendingIntent
。