从通知中刷新活动,而不重新创建它。

3
我正在尝试在我的Android应用中实现通知功能。 当用户点击通知时,如果活动没有运行,则运行该活动。但是,如果活动已经在运行,我不希望重新创建它,而只想通过拦截onNewIntent函数的意图来刷新数据。 问题在于,每次我点击通知时,活动都会被重新创建,而onNewIntent函数不会被调用。
当我从服务中创建通知时,这个问题就会出现。 但是,当我从要运行的同一活动中创建通知时,一切都正常工作。
我搜索了互联网并尝试了所有我找到的解决方案,但仍然无法解决。
我尝试了几种意图标记的组合,但什么也没起作用。
这是我的代码:
    val intent : Intent = Intent(this, HomeActivity::class.java)
    finalIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP)

    val pendingIntentFlags : Int = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S)
    {
        PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_MUTABLE
    }
    else
    {
        PendingIntent.FLAG_UPDATE_CURRENT
    }

    val pendingIntent : PendingIntent? = TaskStackBuilder.create(context).run {
        addNextIntentWithParentStack(finalIntent)
        getPendingIntent(0, pendingIntentFlags)
    }

    val notification = NotificationCompat.Builder(context, type.channelId)
        .setBadgeIconType(NotificationCompat.BADGE_ICON_SMALL)
        .setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
        .setPriority(NotificationCompat.PRIORITY_MAX)
        .setCategory(Notification.CATEGORY_SERVICE)
        .setDefaults(Notification.DEFAULT_ALL)
        .setAllowSystemGeneratedContextualActions(true)
        .setOnlyAlertOnce(true)
        .setAutoCancel(true)
        .setLocalOnly(true)
        .setOngoing(false)
        .setSilent(false)
        .setSmallIcon(R.drawable.icon_notification)
        .setContentIntent(pendingIntent)
        .build()

    notificationManager?.notify(NOTIFICATION_ID, notification)
2个回答

1

您可以在活动的清单文件中将启动模式属性设置为singleInstance,并仅使用FLAG_ACTIVITY_NEW_TASK启动它。


谢谢您的回答,但它并没有起作用...问题仍然存在。 - user13548798
在从服务启动意图之前和之后,您能否检查活动实例的哈希码?它们是否不同? - meysam ghorbani

0
让您的通知发送广播。 在您的活动中,您应该注册一个动态广播接收器。 这将允许您在不重新加载内容的情况下刷新活动中的内容。
对于活动未运行的情况,您应该在清单中定义一个广播接收器来启动活动。 当您的活动启动时,禁用广播接收器,并在活动停止时重新启用它。

2
这是一个“通知跳板”,但不建议使用,因为它在针对Android 12时无法正常工作(https://developer.android.com/about/versions/12/behavior-changes-12#notification-trampolines)。 - Pawel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接