如何从意图中获取完整的深度链接网址?

Posted

技术标签:

【中文标题】如何从意图中获取完整的深度链接网址?【英文标题】:How to get full deeplink url from intent? 【发布时间】:2022-01-05 15:27:47 【问题描述】:

我的应用处理深层链接。当我尝试检索我的深层链接 URL 时,我得到的不是完整的 URL(没有查询参数)。

我的 androidManifest:

  <intent-filter>
                <category android:name="android.intent.category.DEFAULT" />
                <action android:name="android.intent.action.VIEW" />

                <category android:name="android.intent.category.BROWSABLE" />

                <data
                    android:host="www.test.com"
                    android:scheme="testlink" />
            </intent-filter>

例如,我需要处理一个深层链接: testlink://www.test.com/strategy?year=2021

我正在尝试获取数据的内部活动:

@Override
protected void onCreate(Bundle savedInstanceState) 
         super.onCreate(savedInstanceState);
    String url = getIntent().getData().toString();
 

我得到一个这样的 URL:testlink://www.test.com/strategy?但预期 testlink://www.test.com/strategy?year=2021 。查询参数被剪裁。

为什么会发生这种情况?请帮帮我。

注意: 使用 HTTPS 或 HTTP 方案时,我按预期从意图中获取 URL,但是当我使用自定义方案时,查询参数丢失

【问题讨论】:

发布主代码。我无法从您的代码中找到 Intent。 您是否使用 adb 来测试深层链接?有一个已知的错误。 【参考方案1】:

你必须用这个字符'?' 拆分你的Uri 才能得到year=2021 这样。

Intent appLinkIntent = getIntent();
String appLinkAction = appLinkIntent.getAction();
Uri appLinkData = appLinkIntent.getData();

if (Intent.ACTION_VIEW.equals(appLinkAction) && appLinkData != null) 
    String lastUrlId = appLinkData.getLastPathSegment(); // strategy?year=2021
    String[] segments = lastUrlId.split("?");
    ....


【讨论】:

【参考方案2】:

在应用清单中的 Activity 意图过滤器中包含以下内容:

            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
                <data
                    android:host="www.test.com"
                    android:scheme="testlink" />
            </intent-filter>

然后在该活动的 onCreate 函数中,您可以使用:

Uri uri = this.getIntent().getData();

从意图中检索android.net.Uri。

如果您想从 Uri 获取更多信息,您可以使用:

//To get the full url passed in use
uri.toString();

//To get the data after the '?' only use
uri.getEncodedQuery();

从这里:https://***.com/a/58346741/2396026

以上代码已在 API30 x86 仿真器映像上测试并运行。

【讨论】:

以上是关于如何从意图中获取完整的深度链接网址?的主要内容,如果未能解决你的问题,请参考以下文章

Android 深度链接。从历史记录打开应用程序时,意图不会重置

来自深度链接意图时如何仅打开 1 个 android 应用程序实例?

如何从网址获取所有href链接

如何获取图片网络链接啊?

没有网站的 xamarin 应用程序的深度链接

使用.htaccess从404页面获取引荐来源网址