Android AlarmManager - 从其他活动取消

时间:2012-04-07 14:52:51

标签: java android android-activity 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相同,但是我怎么做,因为我无法从其他类访问上下文。 (我不认为)。

2 个答案:

答案 0 :(得分:1)

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

private static Context context;

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

然后,只需添加onCreate方法a:

MyActivity.context = getApplicationContext();

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

答案 1 :(得分:1)

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