android - 我可以从通知中启动对话活动,使其显示在我的应用程序窗口上而不是空白背景上吗?
问题描述
我正在编写一个包含两个主要活动的应用程序:
- 主要活动
- 对话活动
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)的模拟器
解决方案
而不是通过将参数与意图一起传递来移动 DialogActivity 启动应用程序,然后处理参数值。基于此决定是否启动对话活动
推荐阅读
- java - @DiscriminatorColumn 的 JPQL “GROUP BY”
- php - 如何在 php 中像 Telethon 一样在电报中向用户发送消息
- android - Kivy,从用户 TextField 输入创建 MDChip
- php - 搜索功能加载结果页面,未链接到正确的页面/如何重新设计搜索结果页面?
- postgresql - 使用 pg_dump 和 psql ,pg_restore 不适用于将 Postgres 从 9.6.11 迁移到 9.6.18
- python - 将外部环境中的 python 代码动态“注入”到 Paraview 可编程源中的最佳方法是什么?
- azure-pipelines - Azure Pipelines - 使用 azcopy 下载文件
- apache-spark - 如何将其他数据帧传递给自定义 Spark MLLib 转换器
- javascript - 学习一成不变,听不懂他们说什么
- bash - while 循环中的读取行如何工作