以Array-list或其他形式将Pending-Intent保存到共享首选项中?

时间:2018-03-30 07:31:27

标签: android arraylist sharedpreferences android-pendingintent

我正在开发一个应用程序,我希望将待处理的意图保存到共享首选项中,并在共享首选项中存在待处理意图时对应用程序执行某些操作。

参考链接:

Store ArrayList<PendingIntent> into SharedPreferences

但此链接中也找不到解决方案。

如果有人知道我该怎么做,请告诉我。

感谢。

1 个答案:

答案 0 :(得分:1)

您在评论中写道:

  

如果您有多个闹钟,而您想取消其中一些闹钟,那么我   我们认为我们只能通过其PendingIntent取消。那就是   我保存PendingIntent的原因。我的做法是否正确?

没有。这不是解决此问题的正确方法。

是的,您需要提供PendingIntentAlarmManager.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,但您也可以使用ServiceBroadcastReceiver,无论您在代码中使用了什么。

如果您只是想使用它来取消现有的闹钟,不需要将任何额外内容添加到Intent

如果您有多个闹钟,则Intent 必须是唯一的。您只需要保存正在使用的任何内容以使其唯一(requestCodeIntent ACTION,或其他),然后在您要取消时使用相同的参数重新创建PendingIntent警报。