无法从通知启动的 Activity 中删除额外内容
Can not remove extras from Activity launched from notification
我有 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。额外的东西还在,所以基本上应用程序是循环的。
更奇怪的是,并非在所有设备上都会发生。
我有 Sony Xperia XZ1 Compact (Android 9),但大约 250 名用户中没有人报告过此类问题。
编辑:
ContentActivity
中的 onBackPress
override fun onBackPressed() {
super.onBackPressed()
if (supportFragmentManager.backStackEntryCount == 0) {
this.finish()
}
}
问题出在开发者设置中,“不保留活动”
我忘记在一些特定测试后禁用此设置
也许有人会发现这很有帮助 :)
我有 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。额外的东西还在,所以基本上应用程序是循环的。
更奇怪的是,并非在所有设备上都会发生。 我有 Sony Xperia XZ1 Compact (Android 9),但大约 250 名用户中没有人报告过此类问题。
编辑: ContentActivity
中的 onBackPress override fun onBackPressed() {
super.onBackPressed()
if (supportFragmentManager.backStackEntryCount == 0) {
this.finish()
}
}
问题出在开发者设置中,“不保留活动” 我忘记在一些特定测试后禁用此设置 也许有人会发现这很有帮助 :)