我被困住了。当我的应用程序启动时,我想检查我之前设置的警报是否存在。如果没有,那么我想设置它。
我提到this solution。我试图匹配这样的意图:
Intent intent = new Intent();
intent.setAction("com.vit.upload");
PendingIntent pIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_NO_CREATE);
但它不起作用。还有什么办法呢?
答案 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待定意图使用唯一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,您似乎无法直接检查是否存在警报,但他们确实提供了一些解决方法。