无论是哪个类,应用程序上下文总是一样的吗?

时间:2012-11-28 20:44:34

标签: android sqlite broadcastreceiver

我是整个Android环境中的新手,我常常有些疑惑,也许你可以考虑非常基本的知识,有点愚蠢。我会尽力解释我的疑问,以及为什么我要让它理解。

我正在做一个应用程序,你可以设置通知来提醒你想要的学者课程。我已经完成了一个扩展BroadcastReceiver的类,因此它可以在设备启动后重置所有警报。我有一个数据库,我可以保存有关警报的信息:类,必须配置的时间等。我检索所有警报并以这种方式将它们设置为alarmManager:

intent = new Intent(ctxt.getApplicationContext(), Notificacion.class);
intent.putExtra("TAG", tag);
intent.putExtra("SUBJECT", cursor2.getString(0));
intent.putExtra("AULA", cursor2.getString(1));                  
displayIntent = PendingIntent.getBroadcast(ctxt, Integer.parseInt(tag), intent, PendingIntent.FLAG_UPDATE_CURRENT );               
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY*7, displayIntent);

嗯,我想这应该可以正常工作,直到这里。问题是,当您使用应用程序并且想要设置通知时,您正在从“Schedule.class”类中执行此操作,因此意图将具有此上下文:

Intent intent = new Intent(getApplicationContext(), Notification.class);
PendingIntent pend = PendingIntent.getBroadcast(this, Integer.parseInt(tag), intent, PendingIntent.FLAG_UPDATE_CURRENT);

在应用程序中,您可以删除警报,并且必须调用alarmManager.cancel(pend)才能执行此操作。所以我怀疑是否可以取消它。

如果上下文不同,它将找不到与待定意图的匹配,因为它是根据我在BroadCastReceiver(ctxt)扩展中获得的上下文设置的,并且警报是根据我从中获取的上下文设置的Schedule.class。

那么..应用程序上下文总是一样的吗?我知道设置上下文是为了向其他类提供有关已经发生的事情的信息,但我不确定Intent过滤器是否会区分上下文的位置。

提前谢谢!

1 个答案:

答案 0 :(得分:2)

查看您正在使用的取消方法的AlarmManager文档:

  

public void cancel (PendingIntent operation)

     

在API级别1中添加

     

删除具有匹配Intent的所有警报。任何   任何类型的警报,其意图与此匹配(由...定义)   filterEquals(Intent),将被取消。

因此,Intent.filterEquals文档说明如下:

  

public boolean filterEquals (Intent other)

     

在API级别1中添加

     

确定两个意图是否相同   意图解决(过滤)的目的。也就是说,如果他们采取行动,   数据,类型,类和类别相同。这没有比较   意图中包含的任何额外数据。

我想不出为什么动作,数据,类型,类或类别会从一个明确的意图与另一个明显的意图不同的任何原因(除非显然你不顾一切地改变这些事情)。上下文似乎不符合匹配的标准,因此我认为无论在哪个上下文用于创建匹配的情况下,您都可以相信它会被取消。