我将简要解释一下我需要实现的目标,我已将PendingIntent
与AlarmManager.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
强制resultCode
为PendingIntent.getBroadcast()
。
在结果代码之间进行区分的正确方法是什么,这样我不仅可以有多个通知(因为创建新结果时会覆盖相同的resultCode)但我还需要一种方法来跟踪结果代码,因为我可能想在显示之前将其删除。
答案 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 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,如果所有参数匹配,它会返回令人兴奋的令牌
希望这有用:)