Android - 跟踪多个PendingIntents的正确方法是什么?

时间:2018-05-02 20:50:35

标签: android push-notification kotlin android-pendingintent

我将简要解释一下我需要实现的目标,我已将PendingIntentAlarmManager.setRepeating()结合使用,以便每周通知用户。

val notificationAlarmManager = getSystemService(Context.ALARM_SERVICE) as AlarmManager
val notificationIntent = Intent(this, ReminderBroadcastReceiver::class.java)
val pendingNotificationIntent = PendingIntent.getBroadcast(this, 549078, notificationIntent,
        PendingIntent.FLAG_UPDATE_CURRENT)
 myCalendar.set(Calendar.HOUR_OF_DAY, 10)
 notificationAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP, myCalendar.timeInMillis, notificationOffset(sub.cycle),
                    pendingNotificationIntent)

正如您现在所看到的,我在549078强制resultCodePendingIntent.getBroadcast()

在结果代码之间进行区分的正确方法是什么,这样我不仅可以有多个通知(因为创建新结果时会覆盖相同的resultCode)但我还需要一种方法来跟踪结果代码,因为我可能想在显示之前将其删除。

2 个答案:

答案 0 :(得分:2)

无法查询Any的{​​{1}}。您必须存储QString string("192.168.1.1"); QHostAddress address(QHostAddress::Any); address.setAddress(string); udpSocket = new QUdpSocket(); bool result = udpSocket->bind(address , 7755); 和其他信息才能重新创建AlarmManager以删除它。

例如在SharedPreferences或SqliteDB或Room等数据库中。然后,您可以重新创建PendingIntent以取消它。

how to cancel PendingIntent

有关在比较删除意图时哪些字段很重要的详细信息,请参阅How does android compare pending intents

答案 1 :(得分:0)

我遇到了同样的问题,我所做的如下:

1)我创建了一个int字段,我在主活动中创建了一个静态字段。

2)我从应用程序数据库的主要活动的onCreate()中获取此变量的值。

3)每次创建新警报时,我都会通过以下函数获取新的请求代码:

public static int getRequestCode() {
    int temp = this.requestCode++;
    // Update the database value with the current requestCode value
    return temp;
}

4)在我的情况下,我在警报类中添加了一个名为requestCode的新字段,因此我可以跟踪哪个警报的请求代码,因为我已经在我的数据库中保存警报,对于您的情况我不确定你的应用程序究竟如何,但我想你需要找到一种方法来为每个警报存储这个值。

我不确定这会非常有用,因为我不确定您是否在为您的应用使用数据库,但我建议您考虑创建一个,即使是本地的,如果您不关心将您的数据放在服务器上(您可以使用Room Library,它非常直接,这里是https://developer.android.com/topic/libraries/architecture/room,因为我相信这肯定会从长远来看会给你带来很多问题,因为当你启动一个新系统时,系统并没有真正创建一个新的PendingIntent,如果所有参数匹配,它会返回令人兴奋的令牌

希望这有用:)