【发布时间】: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