首页 > 解决方案 > 我可以从通知中启动对话活动,使其显示在我的应用程序窗口上而不是空白背景上吗?

问题描述

我正在编写一个包含两个主要活动的应用程序:

MainActivity 是一个典型的应用程序窗口,而 DialogActivity 是我通过设置设置为看起来像一个对话框的 Activityandroid:theme="@style/Theme.AppCompat.Light.Dialog"

从 MainActivity 内部,我可以使用以下代码启动 DialogActivity。

val intent = Intent(this, DialogActivity::class.java)
startActivity(intent)

然后对话窗口出现在主窗口上,如下所示:

在此处输入图像描述

除此之外,我还希望能够通过点击通知来启动对话框。如果我打开了不同的应用程序并点击通知,对话框会出现在另一个应用程序的顶部,就像我想要的那样:

在此处输入图像描述

但是,如果我当前打开 MainActivity 然后点击通知,对话框将出现在空白背景的顶部:

在此处输入图像描述

尽管对话框出现在概览屏幕中主活动窗口的“顶部”,但仍会发生这种情况:

在此处输入图像描述

所以这是我的问题:如果我在前台有 MainActivity,然后通过点击适当的通知启动 DialogActivity,我可以让 DialogActivity 出现在打开的 MainActivity 窗口的顶部吗?

换句话说,当我点击通知时,如果 MainActivity 已经在前台打开,我希望它看起来像第一张图片,如果另一个应用程序在前台,则像第二张图片,并且只有在没有应用程序时才像第三张图片目前开放。

我正在使用以下 PendingIntent 从通知中启动活动。也许有一组特殊的意图标志可以做我想要的?或者也许我需要做一些更激烈的事情,比如将两个单独的活动合并为一个活动?

val intent = Intent(this, DialogActivity::class.java)
intent.flags = 0
val pendingIntent = PendingIntent.getActivity(this, 0, intent, 0)

屏幕截图来自运行 Android 9(Api Level 28)的模拟器

标签: androidandroid-intentandroid-notificationsandroid-dialog

解决方案


而不是通过将参数与意图一起传递来移动 DialogActivity 启动应用程序,然后处理参数值。基于此决定是否启动对话活动


推荐阅读