android如何比较未决意图

android如何比较未决意图,android,android-intent,alarmmanager,android-pendingintent,Android,Android Intent,Alarmmanager,Android Pendingintent,文件如下: 指示如果所述PendingEvent不存在,则只返回null而不是创建它的标志 我的问题:比较未决内容的标准是什么? 我在猜测这个标志使用的是什么,但我不确定该函数使用的是什么标准。是否使用了动作、请求代码、类别、附加功能(我猜不是)等 背景: 如果我的警报尚未设置,我想启动一个具有挂起意图的警报。具体来说,我正在关注这一点 我猜在引擎盖下这面旗帜使用PendingEvent.equals,但是 我不确定该函数使用的是什么标准。它在使用吗 动作、请求代码、类别、附加内容(我猜不是)等

文件如下:

指示如果所述PendingEvent不存在,则只返回null而不是创建它的标志

我的问题:比较未决内容的标准是什么?

我在猜测这个标志使用的是什么,但我不确定该函数使用的是什么标准。是否使用了动作、请求代码、类别、附加功能(我猜不是)等

背景:

如果我的警报尚未设置,我想启动一个具有挂起意图的警报。具体来说,我正在关注这一点

我猜在引擎盖下这面旗帜使用PendingEvent.equals,但是 我不确定该函数使用的是什么标准。它在使用吗 动作、请求代码、类别、附加内容(我猜不是)等等

实际上,提示在类描述中:

对意图和目标操作的描述。 此类的实例是使用

getActivity(android.content.Context,int,android.content.Intent,int), getActivities(android.content.Context,int,android.content.Intent[],int), getBroadcast(android.content.Context,int,android.content.Intent,int), getService(android.content.Context,int,android.content.Intent,int)

返回的对象可以传递给其他应用程序,以便它们 以后可以代表您执行您描述的操作

通过向另一个应用程序提供PendingEvent,您就是在授予它 执行您指定的操作的权限,如同其他 应用程序是您自己(具有相同的权限和身份)。作为 因此,您应该注意如何建造悬挂式帐篷: 几乎总是,例如,您提供的基本意图应该具有 组件名称显式设置为您自己的组件之一,以确保 它最终被送到那里,而不是别的地方

悬挂式帐篷本身 只是对系统维护的令牌的引用 用于检索的原始数据。这意味着,即使 拥有应用程序的进程被终止,挂起的内容本身将被终止 保持对已提供的其他进程的可用性。如果 稍后创建应用程序将重新检索相同类型的PendingEvent (相同的操作、相同的意图动作、数据、类别和组件, 和相同的旗帜),它将收到一个表示相同的 如果该标记仍然有效,则可以调用cancel()将其删除

由于这种行为,了解两种意图何时发生是很重要的 在检索悬垂物时被认为是相同的。 人们常犯的一个错误是创建多个PendingEvent 对象的意图仅在其“额外”内容中有所不同, 希望每次都能得到不同的吊坠。这是不可能的 发生意图中用于匹配的部分是 与Intent.filterEquals定义的相同。如果你使用两种意图 根据Intent.filterEquals等效的对象,则 给他们俩买一样的吊坠

有两种典型的处理方法

如果你真的需要多个不同的 PendingEntant对象同时处于活动状态(例如用作两个 同时显示的通知),然后您将 需要确保他们有不同的地方 将它们与不同的悬挂式帐篷关联。这可能是 Intent.filterEquals考虑的Intent属性,或不同的属性 提供给的请求代码整数 getActivity(android.content.Context,int,android.content.Intent,int), getActivities(android.content.Context,int,android.content.Intent[],int), getBroadcast(android.content.Context,int,android.content.Intent,int), 或者getService(android.content.Context,int,android.content.Intent,int)

如果您一次只需要为任何一个 您将使用的意图,然后您也可以使用标志 标记\u取消\u当前或标记\u更新\u当前以取消或修改 无论当前挂起的内容与您的意图有何关联 供应

发件人:

要确定2
pendingent
s是否匹配,以下各项必须相等:

  • 创建
    pendingent
    时使用的
    requestCode
    参数
  • 意图
    动作
  • 意图
    类别
  • 意图
    数据
  • Intent
    MIMETYPE
  • Intent
  • Intent
    组件
额外费用不予考虑


您可以在和中阅读更多内容。

好问题。我知道这是不对的。但是,我过去常常取消以前的警报,在我认为需要的时候重新启动它。。我期待着这个问题的答案。我想它只是请求代码。你不能访问源来检查它吗?Android Studio通常会显示它。我问这个函数的作用是什么:“我在猜测这个标志使用的是什么,但我不确定该函数使用的是什么标准”通常人们通过观看源代码来理解这些东西,这就是为什么我要向你们展示它。我通常在回答时欣赏源代码!帮助解释/支持答案通常是很好的。但是我粘贴了一个链接,它与您粘贴的代码完全一致。我不理解那个代码,所以我在寻找一个解释,而不仅仅是我链接到的代码的副本/过去。对不起,我没有注意到方法的链接。我本想在你的问题中看到它的主体。答案隐藏在你引用的30行文字中。如果你把它格式化,我会给你支票。
Intent i = new Intent(applicationContext, MyService.class);
i.setAction("myAction");
PendingIntent pi = PendingIntent.getService(applicationContext, /*requestCode*/0, i, PendingIntent.FLAG_NO_CREATE);
if (pi != null) {
  AlarmManager alarmMgr = (AlarmManager)applicationContext.getSystemService(Context.AlarmService);
  alarmMgr.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, AlarmManager.INTERVAL_HOUR, AlarmManager.INTERVAL_HOUR, pi);
}