我正在开发一个启动浏览器活动以执行Twitter OAuth授权的应用。此过程使用回调网址,该网址将首先重新启动启动浏览器活动的活动。
我的问题是浏览器页面仍保留在历史堆栈中,当用户首先从首次启动浏览器的首选项活动中单击回来时,它们不会返回到应用程序的主要活动,而是带回了浏览器。我已经尝试在启动意图中添加标志以防止历史记录并重置清除,但在手机上运行时,它似乎不起作用,仅在模拟器上运行。
以下是我用于启动浏览器活动的代码:
Intent webIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(authUrl));
webIntent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
webIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
webIntent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
ctx.startActivity(webIntent);
任何人都知道可能出错了什么?
答案 0 :(得分:2)
启动后将活动标志设置为Intent.FLAG_ACTIVITY_CLEAR_TOP。这样,任务将从应用程序堆栈中删除,因此您的主要活动仍然是每次新启动时的最高活动:
ctx.startActivity(webIntent);
browserIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
答案 1 :(得分:0)
呼叫
finish();
之后
ctx.startActivity(webIntent);
答案 2 :(得分:0)
嗨我现在有同样的问题。我认为解决方案是使用特殊标志启动要返回的活动:
Intent intent = new Intent(this, acticityToReturnTo.getClass());
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);
问题是它不起作用(至少1.6)..但也许有人找到了解决方案。我认为FLAG_ACTIVITY_CLEAR_TOP正是我们的目标。
答案 3 :(得分:0)
我发现Intent.FLAG_ACTIVITY_NO_HISTORY只有在浏览器之前没有运行时才有效。如果我重新启动Android并运行我的应用程序调用浏览器一切正常。但是当我在我的应用程序之前启动浏览器时,浏览器将保留在历史记录中。
这里也是相关问题,但没有真正有用的解决方案