如何更新/删除旧警报?

时间:2018-04-10 03:25:22

标签: android alarmmanager

我的应用中有一项功能,当它从外部API获取数据时会产生警报。刷新API数据时,它会再次根据新数据创建警报。每次用户访问该特定视图时,都会从服务器中提取当前数据并创建警报。如何确保删除使用旧数据创建的警报?该功能是一种提醒服务。

1 个答案:

答案 0 :(得分:0)

如果您使用requestCodePendingIntent.FLAG_UPDATE_CURRENT创建其他警报,则可以在为警报创建PendingIntent时使用最初使用的PendingIntent.FLAG_CANCEL_CURRENT,并且它将首先取消警报并在PendingIntent.FLAG_CANCEL_CURRENT的情况下创建一个新的,或者在PendingIntent.FLAG_UPDATE_CURRENT

的情况下使用新数据更新现有的一个

来自Docs

FLAG_CANCEL_CURRENT

  

表示如果所描述的PendingIntent已存在,则表示在生成新的PendingIntent之前应取消当前的PendingIntent。用于getActivity(Context,int,Intent,int),getBroadcast(Context,int,Intent,int)和getService(Context,int,Intent,int)。   当您只更改Intent中的额外数据时,可以使用它来检索新的PendingIntent;通过取消先前的待定意图,这可确保只有给定新数据的实体才能启动它。如果此保证不是问题,请考虑FLAG_UPDATE_CURRENT。

FLAG_UPDATE_CURRENT

  

指示如果描述的PendingIntent已经存在的标志,则保留它,但将其额外数据替换为此新Intent中的内容。用于getActivity(Context,int,Intent,int),getBroadcast(Context,int,Intent,int)和getService(Context,int,Intent,int)。   如果您创建只有额外内容更改的意图,并且不关心接收到您之前的PendingIntent的任何实体将能够使用您的新附加功能启动它,即使它们未明确赋予它,也可以使用此功能。

否则,如果未指定这些标志,您可以手动取消它们。您只需要请求代码

PendingIntent pendingIntent = 
PendingIntent.getBroadcast(mContext, requestCode, alarmReceiverClassIntent, PendingIntent.FLAG_UPDATE_CURRENT);

 AlarmManager am = (AlarmManager) mContext.getSystemService(ALARM_SERVICE);
    if (am != null) {
        am.cancel(pendingIntent);
    }