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

新手上路,请多包涵

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

我提到了 这个解决方案。我正在尝试匹配这样的意图:

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

但它不起作用。还有什么会起作用?

原文由 NullPointerException 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 221
2 个回答

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

您可以通过使用唯一 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

这个答案 将帮助您了解如何做到这一点。只需按照上面的建议在 BroadcastReceiver 的 onReceive() 方法中重新创建警报。

原文由 Erol 发布,翻译遵循 CC BY-SA 3.0 许可协议

  • 当您重新启动您的 Android 设备时,第一个闹钟将不起作用。
  • 您可以使用布尔共享首选项来检查警报是否已创建。
  • Android 待定意图使用唯一 ID
   int REQUEST_CODE=2344; // Unique ID
  PendingIntent pIntent = PendingIntent.getBroadcast(context, REQUEST_CODE, intent, PendingIntent.FLAG_NO_CREATE);

您必须在系统重新启动时使用引导接收器广播,然后使用相同的请求代码再次创建 alaram REQUEST_CODE=2344;

原文由 Munish Kapoor 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题