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

Nul*_*ion 31 android alarmmanager

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

我提到了这个解决方案.我试图匹配这样的意图:

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

但它不起作用.还有什么工作?

Ero*_*rol 75

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

您可以通过使用唯一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);
Run Code Online (Sandbox Code Playgroud)

如果要访问此警报,则必须使用相同的唯一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);
Run Code Online (Sandbox Code Playgroud)

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

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

不要忘记检查警报的时间是否已经过去,以避免尝试设置过去时间的警报,这将立即触发警报.

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

这个答案将帮助您如何做到这一点.只需在BroadcastReceiver的onReceive()方法中重新创建警报,如上所述.


Mun*_*oor 5

  • 重新启动Android设备时,第一个警报将不起作用.
  • 您可以使用布尔共享首选项来检查是否已创建警报.
  • Android待定意图使用唯一ID

    int REQUEST_CODE=2344; // Unique ID  
    PendingIntent pIntent = PendingIntent.getBroadcast(context, REQUEST_CODE, intent, PendingIntent.FLAG_NO_CREATE);
    Run Code Online (Sandbox Code Playgroud)

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


Jak*_*ieł 5

基本上根据我的经验,如果您使用相同的 Intent 和FLAG_UPDATE_CURRENT,您可以确定不会为同一意图设置两个警报。您还可以仔细查看FLAG_NO_CREATE,它与 get 函数一起使用,如果具有所描述意图的待处理意图已经存在,则返回 null。

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