有没有办法检查是否已经设置了警报?

时间:2012-06-07 10:30:04

标签: android alarmmanager

我被困住了。当我的应用程序启动时,我想检查我之前设置的警报是否存在。如果没有,那么我想设置它。

我提到this solution。我试图匹配这样的意图:

Intent intent = new Intent();
        intent.setAction("com.vit.upload");
        PendingIntent pIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_NO_CREATE);

但它不起作用。还有什么办法呢?

4 个答案:

答案 0 :(得分:72)

首先,有关如何访问以前创建的警报的小教程:

您可以通过使用唯一ID创建警报来区分警报,例如:

Intent intent = new Intent(this, AlarmReceiverActivity.class);
PendingIntent pi = PendingIntent.getActivity(this,UNIQUE_ID_GOES_HERE, intent, 0);
AlarmManager am = (AlarmManager)getSystemService(Activity.ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, triggerAtMillis ,pi);

如果要访问此警报,则必须使用相同的唯一ID创建相同的PendingIntent。例如,以下内容仅访问您使用PendingIntent id 1234创建的警报。然后它将取消之前的警报并重置它。

Intent intent = new Intent(this, AlarmReceiverActivity.class);
PendingIntent pi = PendingIntent.getBroadcast(this, 1234, intent, 0);
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, triggerAtMillis ,pi);

这个想法很简单。跟踪ID,然后使用它们访问各自的警报。如果您创建具有相同ID的多个警报,则最新的警报将取消之前的警报。

遇到您的主要问题,而不是每次启动应用程序时检查您的闹钟是否处于活动状态,只需在活动的onCreate()方法中重新设置即可。与我上面描述的PendingIntent相同。这样可以省去检查先前是否设置过警报的麻烦。由于您的目标是使警报保持活动状态,因此每次启动应用程序时都不会覆盖先前设置的警报。只需确保使用相同的ID来创建PendingIntent。

不要忘记检查闹钟的时间是否已经过去,以避免尝试设置过去的闹钟,这会立即触发。

让我们考虑另一种情况:当您关闭设备时,所有闹钟都将被取消。这使您别无选择,只能在重新启动时再次设置它们。为此,您必须使用BroadcastReceiver

This answer将帮助您完成此操作。只需按照上面的建议在BroadcastReceiver的onReceive()方法中重新创建警报。

答案 1 :(得分:5)

  • 重启Android设备时,第一个闹钟将无效。
  • 您可以使用布尔共享首选项来检查是否创建了警报。
  • Android待定意图使用唯一ID

    int REQUEST_CODE=2344; // Unique ID  
    PendingIntent pIntent = PendingIntent.getBroadcast(context, REQUEST_CODE, intent, PendingIntent.FLAG_NO_CREATE);

您必须在系统重启时使用Boot Receiver广播,然后使用相同的请求代码再次创建alaram REQUEST_CODE=2344;

答案 2 :(得分:3)

从我的经验来看,如果你使用相同的Intent和FLAG_UPDATE_CURRENT,你可以确定你不会为同一个意图设置两个警报。您还可以仔细查看与get函数一起使用的FLAG_NO_CREATE,如果已描述intent的pendingintent已经存在,则返回null。

还要记住对待处理的意图使用相同的请求ID,因为它们是可区分的。

答案 3 :(得分:1)

根据信息here,您似乎无法直接检查是否存在警报,但他们确实提供了一些解决方法。