android - 使用导航组件的深层链接未打开我的目标片段
问题描述
我正在使用 Android Navigation UI 在我的应用中进行导航。我需要在我的第二个片段中打开一个 Web URL(动态链接)。
这是我在导航图中的代码
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/mobile_navigation"
app:startDestination="@+id/nav_home">
<fragment
android:id="@+id/nav_home"
android:name="com.myproject.main.HomeFragment"
android:label="Home"
tools:layout="@layout/fragment_home" >
<action
android:id="@+id/action_nav_home_to_secondFragment"
app:destination="@id/secondFragment" />
</fragment>
<fragment
android:id="@+id/nav_library"
android:name="com.myproject.main.SecondFragment"
android:label="@string/menu_library"
tools:layout="@layout/fragment_library">
<deepLink
android:id="@+id/deepLink"
app:uri="https://myproject.page.link/*" />
</fragment>
</navigation>
并将此导航图添加到清单中的主要活动中
<activity
android:name=".main.MainActivity"
android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar"
>
<nav-graph android:value="@navigation/mobile_navigation" />
</activity>
当用户单击 URL 时,我想打开我的第二个片段,https://myproject.page.link/i5sA
但是当我单击此链接时,我的应用程序甚至不会被提示在此应用程序中打开。仅提示浏览器。当我单击使用 chrome 浏览器打开时,它只会使用默认的起始目的地打开我的应用程序。
我需要的是当用户按下该网页 URL 时,我需要使用 SecondFragment 打开我的应用 MainActivity 并获取该 URL 数据,而不是打开默认的主页片段。
我看过开发者页面以及很多文章和教程,但我不知道我在这里缺少什么,任何人都可以告诉我......
解决方案
app:uri="https://myproject.page.link/*"
用作*
占位符不是 android 架构导航中的有效深层链接。
虽然https://myproject.page.link/*
URI 可以有效地打开https://myproject.page.link/ * 完全按原样(即带有星号)
但根据文档:
{placeholder_name} 形式的路径参数占位符匹配一个或多个字符。例如,http://www.example.com/users/{id}匹配http://www.example.com/users/4。
因此,如果您想将此星号作为占位符,以便将某些信息传递给您的应用程序,您需要将其包装到花括号 {}; 所以你的URI是:
app:uri="https://myproject.page.link/{placeholder_name}"
请注意,您可以从 Google 搜索应用程序(而不是浏览器应用程序)测试此 URI,因为如果您想从浏览器打开它,您必须全局注册域名;这是为了让 Google 验证您是 URI 的所有者。在这里查看更多信息。
推荐阅读
- javascript - 从rs值mysql php匹配颜色图表
- excel - 没有 Power Query/Get 和 Transform 的 Excel 版本是否可以访问 QueryTable 对象模型?
- android - 导航组件参数默认值
- mysql - 我们如何在mysql中实现tis结果?
- emacs - 尝试运行后台进程时暂停 tty 输出
- swift - SwiftUI 可观察对象未观察到
- swift - 在 Swift 中显示数组的非重复元素
- python - 实例化类并通过与类声明相同的模块中的函数调用其函数?
- sql - 错误:由于并发更新,无法序列化访问
- php - 如何在laravel中获取数组的某些元素?