自动将 requestCodes 分配给 PendingIntent.getBroadcast(使用 AlarmManager)

Automatically assign requestCodes to PendingIntent.getBroadcast (using AlarmManager)

我本质上是在我的 android 应用程序中为另一个应用程序提供一个接口。客户要求一个系统,他既可以安排在特定时间显示新的本地通知,也可以取消所有本地安排的通知。有没有一种方法可以在将它们与 AlarmManager 一起使用时自动分配(实际上是无限的)requestCodes(/ids) 给 PendingIntent 对象?

PendingIntent pendingIntent = PendingIntent.getBroadcast(this, requestCode, someNotificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
...
AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
    alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, futureTimeInMillis, pendingIntent);

我还希望能够在不跟踪请求代码的情况下取消所有这些待处理的意图:

for(int requestCode : somehowGetAllUsedRequestCodes){
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(this, requestCode, someNotificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    pendingIntent.cancel();
    alarmManager.cancel(pendingIntent);
}

如果不手动跟踪请求代码,这是否可能?

您需要在数据库中或其他任何地方跟踪请求代码,以便以后能够取消它们。如果您也将值存储在数据库中,则可以确保 ID 是唯一的。