5

我正在尝试实现一个提醒应用程序。我将所有提醒详细信息都存储在 sqlite 数据库中,例如 id、title、dateInfo、timeInfo 等。

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

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

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

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

任何帮助将不胜感激

4

3 回答 3

2

您可以简单地将您的 rowId 作为额外的被调用意图。这是一个可能有帮助的代码片段:

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'.

最后,当按如下方式调用时,您可以从意图(onCreate() 例如,如果意图是一个活动)中获取 rowId:

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

希望这可以帮助。

于 2013-03-31T18:31:45.613 回答
1

正如其他人提到的那样,我会rowId额外添加,不要误会 - 正如PendingIntent文档中所写的那样,意图不同如下:

如果您确实需要同时激活多个不同的 PendingIntent 对象(例如用作同时显示的两个通知),那么您将需要确保它们有所不同,以便将它们与不同的待定意图。这可能是 Intent 考虑的任何 Intent 属性。filterEquals,或提供给 getActivity(Context, int, Intent, int)、getActivities(Context, int, Intent[], int)、getBroadcast(Context, int, Intent, int) 或 getService(Context, int) 的不同请求代码整数, 意图, int)。

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

于 2021-05-31T03:39:16.123 回答
0

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

只需将行 ID 作为额外的 Intent 传递。

于 2013-03-31T15:54:50.973 回答