0

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

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

4

2 回答 2

1

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

private static Context context;

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

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

MyActivity.context = getApplicationContext();

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

于 2012-04-07T15:01:26.953 回答
1

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

于 2014-05-19T17:03:09.863 回答