Android AlarmManager – 从其他活动取消

我有一个家庭作业计划器应用程序,我想创建一个警报,以提醒用户前一天晚上/在某个时间。 我有一个名为AddNewHomework的Activity,用户创建一个新的家庭作业项目并将其添加到数据库中。 然后调用此代码。

Intent i = new Intent(this, AlarmNotificationReceiver.class); i.putExtra("title", title); PendingIntent pi = PendingIntent.getBroadcast(this.getApplicationContext(), (int) id, i, 0); AlarmManager mAlarm = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE); mAlarm.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 10 * 1000, pi); 

这将创建一个新的警报,在10秒内触发并创建通知。

我的问题是我有另一个名为HomeworkList的活动,它包含一个ListView并显示存储在数据库中的所有家庭作业。 如果用户长按一个然后他们可以选择删除它,但是从数据库中删除它不会删除警报。

我已经找到了可以用来删除警报的代码但是我没有找到任何可以让我理解如何从这个不同的活动中取消警报的内容。 我知道我需要使PendingIntent相同,但是我怎么做,因为我无法从其他类访问上下文。 (我不认为)。

如果它有帮助,您可以通过为当前上下文创建静态getter来从另一个活动访问您的上下文。 在上面的课程中,只需创建一个私有字段:

 private static Context context; public static Context getAppContext(){ return MyActivity.context; } 

然后,只需在onCreate方法中添加一个:

 MyActivity.context = getApplicationContext(); 

现在,从另一个活动访问上下文非常容易。 您可以使用从“MyActivity”中检索到的上下文来取消警报。

根据这个Android:上下文会影响filterEquals(),用于取消警报吗? 如果使用不同的上下文并不重要,这不会影响PendingIntent作为匹配的识别。 我已经在我自己的应用程序中确认了这一点,我使用活动作为上下文从一个活动设置了警报,并使用该活动的上下文从不同的活动中取消它,并且它已成功取消(操作未被触发)。