gpt4 book ai didi

设置和重置闹钟的 Android AlarmManager 问题

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:15:59 25 4
gpt4 key购买 nike

我使用警报从服务器获取数据。我喜欢为用户提供启动和停止闹钟的选项。这意味着我必须检查并查看是否已设置警报。我找到了一些代码,告诉我闹钟是否已设置:

Intent I = new Intent(getApplicationContext(),AlarmReceiver.class);
PendingIntent P = PendingIntent.getBroadcast(getApplicationContext(), 0, I, PendingIntent.FLAG_NO_CREATE);
found = (P!=null);

如果已经设置了闹钟,我会取消它,但如果没有设置,我会设置它(就像切换一样)

问题是这只能工作一次。上面的代码第一次检查已有的告警将返回 null 表示没有警报但是在我取消警报后一旦它返回一个指针到某事,但警报没有运行。

这里是设置闹钟的代码

am = (AlarmManager) getSystemService(getApplicationContext().ALARM_SERVICE);
Intent I = new Intent(getApplicationContext(),AlarmReceiver.class);
PendingIntent P = PendingIntent.getBroadcast(getApplicationContext(), 0, I, PendingIntent.FLAG_CANCEL_CURRENT);
am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 60000, P);

下面是取消闹钟的代码:

am = (AlarmManager) getSystemService(getApplicationContext().ALARM_SERVICE);
Intent I = new Intent(getApplicationContext(),AlarmReceiver.class);
PendingIntent P = PendingIntent.getBroadcast(getApplicationContext(), 0, I, PendingIntent.FLAG_CANCEL_CURRENT);
am.cancel(P);

我是否要在取消警报后重置某些东西以使其 PendingIntent 消失。

最佳答案

取消 AlarmManager 时,不要使用带有 FLAG_CANCEL_CURRENT 标志的 PendingIntent。相反,取消警报后显式取消 PendingIntent:

am = (AlarmManager) getSystemService(getApplicationContext().ALARM_SERVICE);
Intent i = new Intent(getApplicationContext(),AlarmReceiver.class);
PendingIntent p = PendingIntent.getBroadcast(getApplicationContext(), 0, i, 0);
am.cancel(p);
p.cancel();

关于设置和重置闹钟的 Android AlarmManager 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4963271/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com