【问题标题】:Can not remove extras from Activity launched from notification无法从通知启动的活动中删除额外内容
【发布时间】:2021-01-14 06:44:41
【问题描述】:

我有 MainActivity,它是从带有此附加功能的通知中启动的:

 val intent = Intent(this, MainActivity::class.java)
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
    intent.putExtra(Constants.EXTRA_NEWS_ID, id.toInt())
    val options = Bundle()
    options.putInt(Constants.EXTRA_NEWS_ID, id.toInt())
    val pendingIntent = PendingIntent.getActivity(
        this, id.toInt(), intent,
        PendingIntent.FLAG_ONE_SHOT, options
    )

然后在 MainActivity onCreate 中检查附加内容并尝试删除附加内容:

if (intent.hasExtra(Constants.EXTRA_NEWS_ID)) {
        intentFromNotification = true
        Application.newsDetailId = intent.getIntExtra(Constants.EXTRA_NEWS_ID, 0)
        Log.d("NOTIF", "NewsId = ${NzmApplication.newsDetailId}")
        intent.removeExtra(Constants.EXTRA_NEWS_ID)
        intent.replaceExtras(Bundle())
        intent.action = ""
        intent.data = null
        intent.flags = 0
    }

在一些初始逻辑之后,我像这样打开第二个 ContentActivity:

if (intentFromNotification) { // Activity called from notification = automaticly redirect to news detail
                        val intent = Intent(this, ContentActivity::class.java)
                        intent.putExtra(
                            Constants.EXTRA_FRAGMENT,
                            Constants.FRAGMENT_NEWS_DETAIL
                        )
                        intentFromNotification = false
                        startActivity(intent)
                    }

ContentActivity 工作正常,显示需要的内容,但是当我按下 ContentActivity 时,应该打开 MainActivity 并等待用户交互,但它再次执行与第一次打开时相同的代码块并自动打开 ContentActivity。 Extras 仍然存在,所以基本上应用程序是循环的。

更奇怪的是,并非每台设备都会发生这种情况。 我有 Sony Xperia XZ1 Compact (Android 9),但大约 250 名用户中没有其他人不报告此类问题。

编辑: ContentActivity 中的 onBackPress

 override fun onBackPressed() {
    super.onBackPressed()
    if (supportFragmentManager.backStackEntryCount == 0) {
        this.finish()
    }
}

【问题讨论】:

  • 当你启动ContentActivity时,你会在MainActivity中调用finish()吗?您是否在 ContentActivity 中覆盖 onBackPressed()
  • 我没有在 MainActivity 上调用 finish(),onBackPress 在 ContentActivty 中被覆盖,当堆栈中没有更多片段时,ContentActivity 完成
  • 请编辑您的问题并在ContentActivity 中发布覆盖onBackPress() 方法的代码。

标签: android android-intent android-activity notifications extra


【解决方案1】:

问题出在开发者设置中,“不保留活动” 经过一些特定测试后,我忘记禁用此设置 也许有人会觉得这很有帮助:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多