gpt4 book ai didi

java - 通过 url "appname://com.appname/"从网络浏览器打开 Activity 后清除后台堆栈

转载 作者:行者123 更新时间:2023-12-01 05:44:52 27 4
gpt4 key购买 nike

我的应用程序有一个 Activity ,它在浏览器中启动 oauth 授权过程,最后浏览器收到重定向到 url“appname://com.appname”的链接,该 Activity 回调到我的 Activity 。 ( Activity 声明它可以查看此类网址)

一切正常,但如果用户按“返回”,他将返回网络浏览器。我想在回调 Activity 时清除历史堆栈,使该 Activity 成为该任务的根和顶部。

在这种情况下我可以使用哪些标志或 Hook ?

<小时/>

<罢工>我只找到了一个丑陋的解决方案:接收特殊“Gag” Activity 的 appname://com.appname url,该 Activity 将在其 onResume 上启动主要 Activity 。

我尝试将主要 Activity 设为“singleTask”,在新任务中启动浏览器,设置标志 NO_HISTORY 和 EXLUDE_FROM_RECENTS、CLEAR_TOP,设置clearTaskOnLaunch="true"。尝试了 list 中标志和标签的多种组合 - 没有任何帮助。

<小时/>

我解决了这个问题:
1)在AndroidManifest.xml中设置clearTaskOnLaunch =“true”
2)在新任务中启动浏览器(使用FLAG_ACTIVITY_NEW_TASK),并完成当前 Activity (完成当前任务)。
3) 覆盖 onBackPressed:而不是调用 moveTaskToBack(true) 来完成此 Activity ;

当用户按回键时 - 任务(浏览器位于其根目录中)转到后台,用户看到他的主屏幕。

当用户再次启动应用程序时 - 它从现有实例打开,清除任务并成为它的根(因为clearTaskOnLaunch =“true”)

最佳答案

当在网络浏览器中点击链接appname://com.appname时,浏览器调用您的Activity,但浏览器本身没有调用完成,您无法更改浏览器。

我认为创建一个内部有 webview 的新 Activity 可以解决这个问题。

您将启动新的 Activity,而不是 Android 浏览器。在新 Activity 中,设置 webViewClient 以导航回您的主要 Activity :

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) {
}
});

关于java - 通过 url "appname://com.appname/"从网络浏览器打开 Activity 后清除后台堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6183423/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com