I have a service that starts an activity as a dialog/popup window from my app. It works generally ok.
When my app is closed (not in recents), the popup will overlay any underlying app with a transparent surrounding background.
But the issue comes when my app was minimized in the background and I’m using another app, then I click on the service button to display the popup, it brings my app back into the front with the popup over my app (not the previous third-party app).
How can I prevent this behavior and make my activity overly any window regardless of my app’s state?
This is the theme I’m using
<style name="PopupTheme" parent="Theme.AppCompat.Dialog"> </style>
If the popup dialog has nothing to do with your app (and you want it to be separate and distinct from your app in case your app is already running), then you want to do the following:
In the manifest, set the
taskAffinity for this dialog-themed
Activity to an empty string, set the
excludeFromRecents flag and the
noHistory flag like this:
<activity android:name=".DialogThemedActivity" android:taskAffinity="" android:excludeFromRecents="true" android:noHistory="true" ... />
Activity like this ensures that it is not associated with any existing task that your app is currently in. It also ensures that this task will not end up in the list of recent tasks (so that the user doesn’t accidentally start the
Activity again from the list of recent tasks) and that the task will be deleted as soon as the user navigates away from the dialog-themed
Now, in your
Service, make sure that when you launch the
Activity you add
Intent intent = new Intent(this, DialogThemedActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
This is the correct way to do this.