我正在开发一个应用程序,我希望将待处理的意图保存到共享首选项中,并在共享首选项中存在待处理意图时对应用程序执行某些操作。
参考链接:
Store ArrayList<PendingIntent> into SharedPreferences
但此链接中也找不到解决方案。
如果有人知道我该怎么做,请告诉我。
感谢。
答案 0 :(得分:1)
您在评论中写道:
如果您有多个闹钟,而您想取消其中一些闹钟,那么我 我们认为我们只能通过其
PendingIntent
取消。那就是 我保存PendingIntent
的原因。我的做法是否正确?
没有。这不是解决此问题的正确方法。
是的,您需要提供PendingIntent
到AlarmManager.cancel()
。但是,您不需要将PendingIntent
保存在持久性存储中。您需要做的是在持久性存储中保存足够的信息,以便您可以重新创建PendingIntent
。
要重新创建PendingIntent
,您只需执行此操作:
Intent intent = new Intent(context, MyActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, requestCode, intent, PendingIntent.NO_CREATE);
if (pendingIntent != null) {
alarmManager.cancel(pendingIntent); // cancel alarm
pendingIntent.cancel(); // delete the PendingIntent
}
我在示例代码中使用了Activity
,但您也可以使用Service
或BroadcastReceiver
,无论您在代码中使用了什么。
如果您只是想使用它来取消现有的闹钟,不需要将任何额外内容添加到Intent
。
如果您有多个闹钟,则Intent
必须是唯一的。您只需要保存正在使用的任何内容以使其唯一(requestCode
或Intent
ACTION,或其他),然后在您要取消时使用相同的参数重新创建PendingIntent
警报。