2012-04-07 57 views
0

我有一个家庭作业计划器应用程序,我想创建一个闹钟,提醒用户在某个特定时间前/晚的作业。我有一个名为AddNewHomework的活动,这是用户创建一个新的作业项目并将其添加到数据库的位置。这个代码然后被调用。Android AlarmManager - 从其他活动取消

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并显示存储在数据库中的所有Homeworks。如果用户长时间点击一个,那么他们可以选择将其删除,但是将其从数据库中删除将不会删除该警报。

我已经查找了可用于删除闹钟的代码,但是我还没有找到任何可以让我了解如何从这个不同的活动中取消闹钟的代码。我知道我需要使PendingIntent相同,但是我该如何做到这一点,因为我无法访问其他类的上下文。 (我不认为)。

+0

您已尝试'mAlarm.cancel(PendingIntent);'取消警报管理器? – 2012-04-07 15:02:30

+0

@imrankhan我有,但是我需要一个相同的PendingIntent来找到闹钟并取消它。我的问题是创建相同的PendingIntent的 – TomRichardson 2012-04-07 15:32:27

回答

1

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

private static Context context; 

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

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

MyActivity.context = getApplicationContext(); 

访问从另一个活动的背景下,现在很容易。您可以使用从“MyActivity”检索到的上下文取消您的闹钟。

+0

完美工作,非常感谢! – TomRichardson 2012-04-07 15:43:00

+0

你能解释一下吗?我喜欢你的建议来访问适配器类中的上下文,但我没有成功。你可以帮忙吗? – Ranjit 2013-11-19 07:58:49

+0

你能解释一下更多的细节吗?我可以在哪里把这段代码放在我的两个活动中(激活报警和取消报警的活动)? – 2014-01-06 02:04:39

1

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