活动中的旧意图从通知开始

Posted

技术标签:

【中文标题】活动中的旧意图从通知开始【英文标题】:Old intent in activity started from notification 【发布时间】:2021-11-06 06:09:59 【问题描述】:

我正在创建这样的意图

val tapIntent = Intent(context, TaskActivity::class.java).apply 
    flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK

val id = createID()
tapIntent.putExtra("timestamp", currentTime)
val notificationIntent: PendingIntent = PendingIntent.getActivity(context, 0, tapIntent, 0)
val builder = NotificationCompat.Builder(context, "com.task")
    .setSmallIcon(R.drawable.ic_android_black_24dp)
    .setContentTitle(context.resources.getString(R.string.new_task_available))
    .setContentIntent(notificationIntent)
    .setAutoCancel(true)
    .setPriority(NotificationCompat.PRIORITY_MAX)
with(NotificationManagerCompat.from(context)) 
    notify(id, builder.build())

每天会生成几次此通知。 在测试它时,我发现如果我没有关闭活动,而只是刷出它,下次我从意图打开此活动时,我看到该意图存储先前通知的时间戳,而不是当前通知.

从 Intent 读取数据的代码非常简单:

val timestamp = intent.getLongExtra("timestamp", System.currentTimeMillis())
val hourFormatter = SimpleDateFormat("dd/MM/yyyy HH:mm", Locale.getDefault())
Toast.makeText(this, hourFormatter.format(Date(timestamp)), LENGTH_LONG).show()

据我了解Intent.FLAG_ACTIVITY_CLEAR_TASK 应该清除所有旧信息。所以我不明白为什么会这样。 我该怎么做才能收到当前的意图而不是最初的意图?

【问题讨论】:

您是否尝试过覆盖 Activity 中的 onNewIntent 方法并使用该数据? @Kilian in docs 它说这个方法只适用于Intent#FLAG_ACTIVITY_SINGLE_TOP,我没有。 【参考方案1】:

在为Notification 生成PendingIntent 时,您需要这样做:

PendingIntent.getActivity(context, 0, tapIntent,
                    PendingIntent.FLAG_UPDATE_CURRENT)

否则,您将只使用以前的(旧)PendingIntent,而不是创建新的。

【讨论】:

以上是关于活动中的旧意图从通知开始的主要内容,如果未能解决你的问题,请参考以下文章

如何从后台服务的全屏意图通知Android中打开活动

如何处理通知中的待处理意图

从 android 推送通知单击启动时,意图数据未在活动中更新

意图恢复先前暂停的活动(从通知中调用)

从通知意图启动活动时重新创建 Android ViewModel

在没有新意图的情况下,我应该如何从通知返回到活动