繁体   English   中英

将活动显示为弹出窗口 window

[英]Display activity as a popup window

我有一项服务,它从我的应用程序中以对话框/弹出窗口 window 的形式启动活动。 它通常可以正常工作。

当我的应用程序关闭时(不是最近关闭的),弹出窗口将覆盖任何具有透明周围背景的底层应用程序。

但是当我的应用程序在后台最小化并且我正在使用另一个应用程序时,问题就出现了,然后我单击服务按钮以显示弹出窗口,它将我的应用程序带回前面,弹出窗口覆盖我的应用程序(不是以前的第三方应用程序)。

无论我的应用程序的 state 如何,如何防止这种行为并使我的活动过度到任何 window?

这是我正在使用的主题

<style name="PopupTheme" parent="Theme.AppCompat.Dialog">
</style>

才发现。 只需将此标志添加到启动意图

intent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK);

如果弹出对话框与您的应用程序无关(并且您希望它与您的应用程序分开并区别于您的应用程序,以防您的应用程序已经在运行),那么您需要执行以下操作:

在清单中,将此对话框主题ActivitytaskAffinity设置为空字符串,设置excludeFromRecents标志和noHistory标志,如下所示:

<activity android:name=".DialogThemedActivity"
          android:taskAffinity=""
          android:excludeFromRecents="true"
          android:noHistory="true"
          ... />

像这样声明Activity可确保它不与您的应用当前所在的任何现有任务相关联。它还确保此任务不会最终出现在最近的任务列表中(这样用户就不会意外启动Activity再次从最近的任务列表中),并且一旦用户导航离开以对话框为主题的Activity ,该任务将被删除。

现在,在您的Service中,确保在启动Activity时添加FLAG_ACTIVITY_NEW_TASK

Intent intent = new Intent(this, DialogThemedActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

这是执行此操作的正确方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM