【问题标题】:Android notification with TaskStackBuilder unexpected behavior带有 TaskStackBuilder 意外行为的 Android 通知
【发布时间】:2022-01-13 20:41:26
【问题描述】:

我正在使用 Android TaskStackBuilder 在单击通知时使用预定义堆栈创建通知。

在应用中我有 2 个活动:

  1. MainActivity 启动器
  2. 活动B

在主要活动中,我使用 TaskStackBuilder 和以下堆栈显示通知:[MainActivity(launcher intent), ActivityB]

当通知显示时,我拉下状态栏并单击通知,然后按预期看到 ActivityB,当单击后退按钮时,我也按预期看到 MainActivity,但它的 onCreate 被调用! 对此有解释吗?这实际上意味着 MainActivity 已经完全重启了!为什么?

MainActivity launchMode:"singleTop"

此外,似乎在单击通知后会创建一个新的 MainActivity,而不是恢复已打开的原始 MainActivity。 (hash不一样,调用了原来的MainActivity onDestroy!)

这样创建的通知待处理意图:

private fun createPendingIntent() : PendingIntent {
    val stackBuilder = TaskStackBuilder.create(applicationContext)
    stackBuilder.addNextIntentWithParentStack(applicationContext.packageManager.getLaunchIntentForPackage(applicationContext.packageName))
    stackBuilder.addNextIntent(Intent(applicationContext, ActivityB::class.java))
    return stackBuilder.getPendingIntent(0, PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT)
}

通知显示如下:

 private fun showNotification() {
    val pIntent = createPendingIntent()
    val builder = NotificationCompat.Builder(this, CHANNEL_ID)
        .setSmallIcon(R.mipmap.ic_launcher)
        .setContentTitle("Have a nice day")
        .setContentText("Take care")
        .setPriority(NotificationCompat.PRIORITY_DEFAULT)
        .setContentIntent(pIntent)

    val notification = builder.build()
    with(NotificationManagerCompat.from(this)){
        notify(100, notification)
    }
}

【问题讨论】:

    标签: android android-notifications


    【解决方案1】:

    我想我找到了更好的方法! 我使用的是 PendingIntent.getActivities,而不是使用 TaskStackBuilder

    我在这里使用它

    private fun createPendingIntent(): PendingIntent {
        val rootIntent  = applicationContext.packageManager.getLaunchIntentForPackage(applicationContext.packageName)
        val nextIntent = Intent(applicationContext, ActivityB::class.java)
        
        return PendingIntent.getActivities(applicationContext, 0, arrayOf(rootIntent, nextIntent), PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT )
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-27
      • 2016-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-14
      • 2017-11-08
      相关资源
      最近更新 更多