14

我在我的应用程序中启用了应用程序链接。它工作正常。但是在我的应用程序中,在某些情况下我无法处理传入的 url。在这些情况下,我想将该 url 重定向到设备中的默认浏览器。

目前我尝试做的是使用意图打开带有 url 的浏览器,但它再次重定向到我的应用程序本身。应用程序链接的格式为 ->

https://<domain>/<prefix>/<params>

因此,根据参数,我想在应用程序本身中处理应用程序链接或将其重定向到默认浏览器。以下是我尝试使用上述网址打开浏览器的代码

val browserIntent = Intent(Intent.ACTION_VIEW, Uri.parse(appLinkModel.url))
browserIntent.addCategory(Intent.CATEGORY_APP_BROWSER)
browserIntent.resolveActivity(packageManager)?.let {
    startActivity(browserIntent)
}

我尝试排除 addCategory() 行,但结果是一样的。应用程序崩溃(因此是 resolveActivity()),或者应用程序在循环中打开自身。

我想做的事

所以我想要做的是将url重定向到默认浏览器(或显示一个没有我的应用程序的选择器),而不是一次又一次地触发应用程序链接。那么这可能吗?

4

4 回答 4

18
String data = "example.com/your_url?param=some_param";
Intent defaultBrowser = Intent.makeMainSelectorActivity(Intent.ACTION_MAIN, Intent.CATEGORY_APP_BROWSER);
defaultBrowser.setData(data);
startActivity(defaultBrowser);

this technique (using makeMainSelectorActivity) will force the link to open in the device's default browser

Note - makeMainSelectorActivity only works for API level 15 and above.

If you need to support API levels lower than 15, you could try this hack

于 2019-11-11T12:24:07.040 回答
6

Kotlin中,尝试使用makeMainSelectorActivity

val defaultBrowser = Intent.makeMainSelectorActivity(Intent.ACTION_MAIN, Intent.CATEGORY_APP_BROWSER)
defaultBrowser.data = Uri.parse("https://yoururl.com/")
startActivity(defaultBrowser)
于 2020-03-24T08:24:09.653 回答
0
        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://stackoverflow.com/questions/58800240/android-app-link-open-a-url-from-app-in-browser-without-triggering-app-link"));
        Intent chooseIntent = Intent.createChooser(intent, "Choose from below");
        startActivity(chooseIntent);

This will open all the installed web browsers from which user can choose!

于 2019-11-11T11:21:14.353 回答
0

不幸的是,我们不能排除任何特定的 URL,因为 Android 不提供该选项。

但是您可以使用路径前缀来处理。

// To handle:
http://myhost.com/v/page1?id=123
// To exclude:
http://myhost.com/v/page2?id=123

然后在清单中

<data android:scheme="http"
      android:host="myhost.com"
      android:pathPrefix="/v/page1" />
于 2019-11-11T12:07:06.013 回答