2011-09-28 49 views
1

我使用此代码其他类取消报警的是其发起它的人

Intent myIntent = new Intent(ClassOne.this, AlarmService.class); 
pendingIntent = PendingIntent.getService(ClassOne.this, 0, myIntent, 0); 

AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
Calendar calendar = Calendar.getInstance(); 
calendar.setTimeInMillis(currentDate.getTime()); 
long when = calendar.getTimeInMillis(); 
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, when, (7 * 24 * 60 * 60) * 1000, pendingIntent); 

从一个类中设置报警现在我需要从另一个类取消未决报警。我可以使用这个代码吗?

Intent myIntent = new Intent(ClassTwo.this, AlarmService.class); 
PendingIntent pendingIntent = PendingIntent.getService(ClassTwo.this, 0, myIntent, 0); 
AlarmManager alarmManagerCancel = (AlarmManager) getSystemService(ALARM_SERVICE); 
alarmManagerCancel.cancel(pendingIntent); 

或者有更好的/正确的方法来取消未决警报?

+0

我已经测试过这个,这个工程,但我不知道这是否正确的方式来取消待处理的报警服务。这是发起这个问题的主要原因。 – sandalone

回答

2

只要PendingIntent与您用来注册报警的功能相同,无论您拨打cancel()从哪里拨打电话即可。如果潜在的意图和请求代码是等价的,则两个PendingIntent s等同(equals()返回true)。

+0

我想到了这个,然后我想到了“潜在的意图”。最初的意图调用'ClassOne + AlarmService',而另一个调用'ClassTwo + AlarmService'。如果发起课程不同,它们是否相等? – sandalone

+1

是的,第一个参数用于确定包的上下文,所以只要你在同一个应用(包)中,它们是等价的。有关详细信息,请查看[docs](http://developer.android.com/reference/android/content/Intent.html)。 (完整的链接不会正确显示,请参阅第5个构造函数) –

+0

您提到了一个“请求代码”。它在哪里?除了'PendingIntent.getService()requestCode'外,我找不到任何请求代码,但它是 发件人的私人请求代码(当前未根据文档使用)。 – sandalone