我的应用程序有一个活动,它在浏览器中启动oauth授权过程,最后浏览器接收重定向到url“appname://com.appname”,它回调我的活动。 (活动声明可以查看此类网址)
一切都很好,但如果用户按下“返回”,他会回到网络浏览器。 我希望在回调活动时清除历史堆栈,以使此活动成为此任务的根和顶部。
在这种情况下,我可以使用哪些旗帜或挂钩?
<击> 我发现只有一个丑陋的解决方案: 接收appname://com.appname urls到特殊的“Gag”活动,它将在其onResume上启动主要活动。
我尝试将主要活动设为“singleTask”,在新任务中启动浏览器,设置标志NO_HISTORY和EXLUDE_FROM_RECENTS,CLEAR_TOP,设置clearTaskOnLaunch =“true”。
尝试了清单中标志和标签的许多组合 - 没有任何帮助。
击>
我解决了这个问题:
1)在AndroidManifest.xml中设置clearTaskOnLaunch =“true”
2)在新任务中启动浏览器(使用FLAG_ACTIVITY_NEW_TASK),并完成当前活动(完成当前任务)。
3)覆盖onBackPressed:而不是完成此活动调用moveTaskToBack(true);
当用户按下后 - 任务(浏览器位于其根目录)转到后台并且用户看到他的主屏幕。
当用户再次启动应用程序时 - 它从现有实例打开,清除任务并成为其根(因为clearTaskOnLaunch =“true”)
答案 0 :(得分:0)
在网络浏览器中点击链接appname://com.appname时,浏览器会调用您的活动,但浏览器没有调用完成本身,您无法更改浏览器。
我认为制作一个内部有webview的新活动可以解决这个问题。
您将启动该新活动而不是Android浏览器。 在新活动中,将webViewClient设置为导航回主要活动:
wv_mem_rank.setWebViewClient(new WebViewClient() {
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if(url.startWith("appname://com.appname"))
{
startActivity();
finish();
}
view.loadUrl(url);
return true;
}
public void onLoadResource (WebView view, String url) {
}
public void onPageFinished(WebView view, String url) {
}
});