在我的项目中,我尝试了一些PendingIntent的可能性和局限性
所以我创建了一些通知,通过点击打开一个活动
Intent intent = new Intent(this, NotificationActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
intent.putExtra(Constants.INTENT_ITEM_NAME, "ItemName");
intent.putExtra(Constants.INTENT_ITEM_ID, itemId);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this, CHANNEL_ID)
// properties set
;
notificationManager.notify(new Random().nextInt(10), notificationBuilder.build());开始时一切都很好,直到我在NotificationActivity中通过点击通知将其他项目显示出来。
这里开始出现问题:在NotificationActivity中仍然显示了以前的项目。
经过一些搜索之后,它可以通过以下方式解决:
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);但是:如果我在同一时间有许多通知,那么我总是只看到最后一项,PendingIntent是为。
getActivity的第二个参数是requestCode。所以当我更新解决方案时
PendingIntent pendingIntent = PendingIntent.getActivity(this, new Random().nextInt(1000), intent, PendingIntent.FLAG_UPDATE_CURRENT);此外,还支持许多项,如果由于某种原因随机使我得到相同的数字,那么NotificationActivity中的内容将是相同的。
所以99%的解决方案是好的,是吗?NO
再到第一步
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);如果我设置了,新的临时演员,的意图,->,,旧的临时演员,将被读取。
换句话说,通过new Random().nextInt(1000)在android系统中的某个地方,设备将被存储到1000 PendingIntents作为一个活动,我有永久的。
下面是questions
关于如何清除它,我的意思是用一些Random作为requestCode移除所有当前使用的Random,以便在同一时间只发出一个通知就可以使用。
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);有不同的项目
发布于 2021-03-30 20:32:37
PendingIntents存储在非持久存储中.当设备重新启动时,它们都消失了。
另外,如果您创建了一个PendingIntent并将其放入一个Notification中,那么一旦Notification消失了(解散、打开等等)。PendingIntent不再使用,将被删除。
通常,您不应该对requestCode使用随机数,因为这不能保证惟一性。您需要找到一种方法,使您的PendingIntent独特,如果您想让其中的许多并行存在。
https://stackoverflow.com/questions/66842730
复制相似问题