PendingIntent获取requestCode

9

我使用AlarmManager启动一个服务。当我设置AlarmManager时,我使用PendingIntent并使用唯一的requestCode,该requestCode等于我的数据库中的id行。

PendingIntent pendingIntent = PendingIntent.getBroadcast(SettingsActivity.this,
                            lecture.getId(), myIntent, 0); 

当我的服务启动时,如何检索该ID?我基本上只需要requestCode参数。我想使用该ID从我的数据库中检索数据并在通知中显示它。我已经实现了所有的东西,我只需要那个requestCode。是否有可能获得它?

谢谢

1个回答

15
你需要将lecture.getId()放入你的myIntent的extras中。根据Javadoc,requestCode目前甚至没有被使用。
// store id
myIntent.putExtra("id", lecture.getId());

// read id or -1, if there is no such extra in intent
int id = myIntent.getIntExtra("id", -1);

但是即使在应用程序被终止时,我仍然需要那个ID。当应用程序被终止时,额外的数据被删除。当extras中的ID为null时,我如何从数据库中获取所需的数据?或者我对此有误解吗? - Aksiom
1
@Aksiom 当 PendingIntent 被触发时,它将具有额外的内容,这与进程被杀死无关。PendingIntent 是一种独立于应用程序运行的意图类型,即使您的应用程序未运行,它也可以运行! - Muhammad Babar
1
@Aksiom 但是当设备重新启动时,“PendingIntent”将被删除,因此在启动时,您必须使用“AlarmManager”重新注册“PendingIntent”。 - Muhammad Babar
即使您的应用程序停止,AlarmManager 也会为您保留 Intent。一旦到达闹钟时间,AlarmManager 将重新启动您的应用程序并将 Intent 发送到广播接收器。不会丢失任何信息。只有在您的手机重新启动或取消 Intent 时,AlarmManager 才会删除数据。 - sergej shafarenka
@MuhammadBabar 好的,谢谢你提供的信息。你能解释一下如何在设备启动时重新注册 PendingIntent 吗? - Aksiom
@Aksiom,请查看beworker提供的链接!有关“BroadcastReceivers”的更多详细信息,请参阅http://www.vogella.com/articles/AndroidBroadcastReceiver/article.html。 - Muhammad Babar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接