Open Browser as Intent but don't keep it on the Activity stack

2.9k Views Asked by At

I'm having some problems with understanding the activity stack and the behaviour of how it affects my app.

Upon clicking a button it starts an Intent which opens the browser. When I'm in the Browser and I press the home button I land onto the homescreen. Now if I start my app again via launcher it opens the browser instead of my app. How can I circumvent opening the browser upon launching my app?

Right now, the code to open an url looks like this:

private void openUrlExternal(String url) {
    Intent openUrlIntent = new Intent(Intent.ACTION_VIEW);
    openUrlIntent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
    openUrlIntent.setData(Uri.parse(url));
    startActivity(openUrlIntent);
}

Am I using the wrong flags? If so, what flags do I have to use?

Thanks in advance!

2

There are 2 best solutions below

0
On BEST ANSWER

Try like this:

openUrlIntent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
openUrlIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

That should disassociate the browser task from your own which means when you re-launch yours it should go to your Activity instead of the browser.

However it also depends on where you are calling openUrlExternal() from. If you call this when your activity launches it is still going to take you back to the browser, but if you call this from an event listener (i.e. Button click) then it shouldn't get called when you re-launch your app.

0
On

I don't think the accepted answer is exactly correct. It depends on what you intend (no pun intended, heh) to do.

Using Intent.FLAG_ACTIVITY_NEW_TASK it means that the launched activity is completely separate from the launching one. In particular, you can switch to the old activity with the Apps button without exiting the new one.

Using Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET means that the user will be returned to the previous activity when it's launched from the apps drawer.

In both cases launching the app again will get you to the previous activity. The main difference will be whether both activities (or just the last one) are shown in the app switcher.