如何在PendingIntents中使用requestCode

时间:2013-03-31 15:52:17

标签: android android-service alarmmanager android-pendingintent

我正在尝试实施一个提醒应用程序。我有所有提醒细节存储在sqlite数据库中,如id,title,dateInfo,timeInfo等。

我想在适当的时间通知用户有关我将使用AlarmManager的提醒。

以下给出的步骤是否可行。

在pendentingIntents中提供row的id作为requestCode。 然后设置一旦触发就会调用服务的警报。 该服务将使用此id从数据库中获取数据。

如果这是可行的,任何人都可以给我一个代码片段。

任何帮助都将受到高度赞赏

3 个答案:

答案 0 :(得分:1)

您可以简单地将rowId作为额外内容放入被调用的intent中。以下是可能有用的代码段:

Intent i = new Intent(this, YourServiceOrActivity.class);
i.putExtra("rowId", rowId);
PendingIntent pi = PendingIntent.getActivity(this, 123123, i, 0); //Notice the random requestCode '123123' as it doesn't matter, yet.

您可以按如下方式设置闹钟:

AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, AlarmManager.INTERVAL_DAY, pi); 
//Set the alarm to wake up the device after one day calling the pending intent 'pi'.

最后,您可以按照以下方式调用intent(onCreate(),例如,如果intent是Activity)获取rowId:

Bundle extras = getIntent().getExtras();
if (extras != null) rowId = extras.getInt("rowId", 0); //Be safe

希望这有帮助。

答案 1 :(得分:1)

正如其他人提到的,我会把 rowId 作为额外的,但是不要误会 - 正如 PendingIntent 文档中所写,意图是不同的,如下所示:

<块引用>

如果您确实需要多个不同的 PendingIntent 对象同时处于活动状态(例如用作同时显示的两个通知),那么您需要确保它们有一些不同的东西可以关联它们具有不同的 PendingIntent。这可以是 Intent 考虑的任何 Intent 属性。 filterEquals,或不同的请求代码整数提供给 getActivity(Context, int, Intent, int), getActivities(Context, int, Intent[], int), getBroadcast(Context, int, Intent, int) , 或 getService(Context, int, Intent, int).

因此,如果您对同一行的所有意图使用相同的 id 请求使用不同的数据,那么您可能会因过时/重复的数据问题而迷失方向。

答案 2 :(得分:0)

根据PendingIntent上的文档,未使用requestCode方法的getService(...)。我不清楚它发生了什么,所以我不会以任何方式依赖它。

只需将行ID作为额外内容传递给意图。