【问题标题】:Keep both pendingIntents with the same requestCode保持两个pendingIntents 具有相同的requestCode
【发布时间】:2017-08-02 12:24:30
【问题描述】:

我正在 Android 中开发一个警报应用程序。流程非常简单,我只是创建一个 PendingIntent,然后在 AlarmManager 中调用 setExact() 方法,如下所示。 p>

        Intent myIntent = new Intent(context, BroadcastReceiver.class);
        pendingIntent = PendingIntent.getBroadcast(context, 0, myIntent, 0);

        AlarmManager alarmManager = (AlarmManager) context.getSystemService(ALARM_SERVICE);
        alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, 
        System.currentTimeMillis() + difference, pendingIntent);

经过一些测试,我意识到使用上面的 sn-p 我只能设置一个警报,因为我将 pendingIntentrequestCode 设置为零,如果我设置requestCode 设置为 0 的另一个警报,那么它将覆盖前一个警报。有没有办法在不更改 requestCode 的情况下解决这个问题?我在想也许这些标志可以帮助我,但我没有找到一个不会覆盖以前的 pendingIntent 的标志。

我知道显而易见的解决方案是将 0 更改为另一个 int,然后跟踪我所有的 int,选择一个未使用的。如果我刚刚开始项目,该解决方案会很好,但是我已经在中间并且我使用预定义的 Enums 作为请求代码。更改此机制并跟踪单个整数非常困难,这就是为什么我要问是否有办法在注册具有相同 requestCode 的新 Intent 时不覆盖pendingIntent。提前谢谢你。

【问题讨论】:

  • 我在问是否存在某种类型的标志可以区分它们

标签: android alarmmanager android-pendingintent


【解决方案1】:

您可以使Intents 独一无二,为每个设置不同的操作。然后你仍然可以使用相同的requestCode 并有不同的PendingIntents。

如果您希望以后能够取消警报,则需要跟踪您使用的 ACTION。

【讨论】:

  • 或者你可以使用setData方法。见docs
【解决方案2】:

我在问是否存在某种类型的标志可以区分它们

没有,这很有意义,因为这已经是 requestCode 参数的目的。

有关信息,这些是您关于标志的选项:

您必须更改您的机制,以便为待处理的 Intent 提供不同的 requestCode。这可能是很多工作,但这是你必须要做的。

【讨论】:

  • 其实没有。如果您使Intents 全部唯一,则不必使用不同的requestCodes。您可以通过在每个 Intent 中设置不同的 ACTION 或不同的 DATA 来做到这一点。
  • @David 很好,我不知道。如果 OP 删除接受,我将删除我的答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-17
  • 1970-01-01
相关资源
最近更新 更多