android - 无论类别如何,应用程序上下文总是相同的吗?

标签 android sqlite broadcastreceiver

我是整个 Android 环境的新手,我通常会有一些疑问,也许你可以考虑非常基础的知识,但有点愚蠢。我会尽我最大的努力解释我的疑问以及为什么我有它让我理解。

我正在做一个应用程序,您可以在其中设置通知来提醒您想要的学者类(class)。我已经完成了一个扩展 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 intent = new Intent(getApplicationContext(), Notification.class);
PendingIntent pend = PendingIntent.getBroadcast(this, Integer.parseInt(tag), intent, PendingIntent.FLAG_UPDATE_CURRENT);

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

如果上下文不同,它不会找到与未决 Intent 的匹配项,因为它是根据我在 BroadCastReceiver (ctxt) 的扩展中获得的上下文设置的,而警报是根据我从中获得的上下文设置的附表.class.

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

提前致谢!

最佳答案

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

public void cancel (PendingIntent operation)

Added in API level 1

Remove any alarms with a matching Intent. Any alarm, of any type, whose Intent matches this one (as defined by filterEquals(Intent)), will be canceled.

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

public boolean filterEquals (Intent other)

Added in API level 1

Determine if two intents are the same for the purposes of intent resolution (filtering). That is, if their action, data, type, class, and categories are the same. This does not compare any extra data included in the intents.

我想不出有任何理由可以解释为什么操作、数据、类型、类或类别从一个显式 Intent 到另一个 Intent 会有所不同(除非,很明显,你特意改变了这些东西)。上下文似乎不在匹配条件中,因此我认为您可以相当有信心,无论最初使用哪个上下文创建它,它都会被取消。

关于android - 无论类别如何,应用程序上下文总是相同的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13614047/

相关文章:

sql - mysql查询。 Join 和 SubQuery 有什么区别?

c# - 如何在 Xamarin 应用程序和 Java Android 应用程序之间共享 sqlite 数据库

java - 在面向 Oreo 的 Android 应用程序上使用 Android Broadcast

android - 我如何从广播接收器调用 IntentService?

java - Android 无法对服务器进行 GET 改造 API 调用

android - 将图像从设备拉到 pc 但无法在 pc 中的 ImageView 中查看

android - 将 JSON 发送到服务器

android - 如何创建带有回调的 Android 服务?

android - 在 SQLite 表中使用文本作为主键不好?

java - 如何在系统启动时启动一个服务并每1分钟重复一次