iva*_*_gg 5 sqlite android 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);
Run Code Online (Sandbox Code Playgroud)
好吧,我想这应该可以正常工作,直到这里.问题是,当您使用应用程序并且想要设置通知时,您正在从"Schedule.class"类中执行此操作,因此意图将具有此上下文:
Intent intent = new Intent(getApplicationContext(), Notification.class);
PendingIntent pend = PendingIntent.getBroadcast(this, Integer.parseInt(tag), intent, PendingIntent.FLAG_UPDATE_CURRENT);
Run Code Online (Sandbox Code Playgroud)
在应用程序中,您可以删除警报,并且必须调用alarmManager.cancel(pend)才能执行此操作.所以我怀疑是否可以取消它.
如果上下文不同,它将找不到与待定意图的匹配,因为它是根据我在BroadCastReceiver(ctxt)扩展中获得的上下文设置的,并且警报是根据我从Schedule.class获得的上下文设置的. .
那么..应用程序上下文总是一样的吗?我知道设置上下文是为了向其他类提供有关已经发生的事情的信息,但我不确定Intent过滤器是否会区分上下文的位置.
先感谢您!
查看 AlarmManager 文档以了解您正在使用的取消方法:
public void cancel(PendingIntent操作)
添加到 API 级别 1
删除具有匹配 Intent 的所有警报。任何类型的任何警报,只要其 Intent 与此警报匹配(由 filterEquals(Intent)定义),都将被取消。
因此,Intent.filterEquals 文档说明如下:
添加到 API 级别 1
确定两个意图是否相同,以便进行意图解析(过滤)。也就是说,如果它们的操作、数据、类型、类和类别相同。这不会比较意图中包含的任何额外数据。
我想不出为什么操作、数据、类型、类或类别会与一个显式意图不同的任何原因(除非,显然你不遗余力地改变这些东西)。这些上下文似乎不在匹配的标准中,因此我认为您可以相当有信心,无论首先使用哪个上下文来创建它,它都会被取消。
| 归档时间: |
|
| 查看次数: |
414 次 |
| 最近记录: |