Android 应用程序 link - 在浏览器中从应用程序打开 url 而不触发应用程序 Link

Android App link - Open a url from app in browser without triggering App Link

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

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

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

所以根据参数,我想在应用程序本身中处理应用程序 link 或将其重定向到默认浏览器。下面是我尝试用上面 url

打开浏览器的代码
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 重定向到默认浏览器(或显示选择器 ,其中没有 我的应用程序),而不触发应用程序 link一次又一次。这可能吗?

        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(""));
        Intent chooseIntent = Intent.createChooser(intent, "Choose from below");
        startActivity(chooseIntent);

这将打开所有已安装的网络浏览器,用户可以从中选择!

遗憾的是,我们无法排除任何特定的 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" />
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);

此技术(使用 makeMainSelectorActivity)将强制 link 在设备的默认浏览器中打开

注意 - makeMainSelectorActivity 仅适用于 API 15 级及以上。

如果您需要支持低于 15 的 API 级别,您可以尝试 this hack

Kotlin 中,尝试使用 makeMainSelectorActivity :

val defaultBrowser = Intent.makeMainSelectorActivity(Intent.ACTION_MAIN, Intent.CATEGORY_APP_BROWSER)
defaultBrowser.data = Uri.parse("https://yoururl.com/")
startActivity(defaultBrowser)