我正在尝试实现一个提醒应用程序。我将所有提醒详细信息都存储在 sqlite 数据库中,例如 id、title、dateInfo、timeInfo 等。
我想在适当的时候通知用户我将使用 AlarmManager 的提醒。
下面给出的步骤是否可行。
在pendentingIntents 中提供行的id 作为requestCode。然后设置一个警报,一旦触发就会调用服务。该服务将使用此 ID 从数据库中获取数据。
如果这是可行的,任何人都可以向我提供一个代码片段。
任何帮助将不胜感激
我正在尝试实现一个提醒应用程序。我将所有提醒详细信息都存储在 sqlite 数据库中,例如 id、title、dateInfo、timeInfo 等。
我想在适当的时候通知用户我将使用 AlarmManager 的提醒。
下面给出的步骤是否可行。
在pendentingIntents 中提供行的id 作为requestCode。然后设置一个警报,一旦触发就会调用服务。该服务将使用此 ID 从数据库中获取数据。
如果这是可行的,任何人都可以向我提供一个代码片段。
任何帮助将不胜感激
您可以简单地将您的 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
希望这可以帮助。
正如其他人提到的那样,我会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
对同一行的所有意图使用相同的请求,使用不同的数据,您可能会因过时/重复的数据问题而迷失方向。
根据PendingIntent上的文档,不使用requestCode
该方法。getService(...)
我不清楚它会发生什么,所以我不会以任何方式依赖它。
只需将行 ID 作为额外的 Intent 传递。