Android Deeplink使用导航组件未按预期工作

15

希望大家都过得好。

我有一个小问题;

我正在使用导航组件,单个活动多个片段。我在深度链接方面遇到了一点问题。

  • 我在清单中设置了<nav-graph/>,并设置了launcherMode="singleTask",

  • 我在导航图中设置了<deeplink/>

  • 我在片段中处理了intent extras。

我的流程是;

  1. 用户点击"忘记密码",填写文本后请求deeplink邮件。工作正常
  2. 用户点击电子邮件中的deeplink并选择应用程序,然后自动导航到CreatePasswordFragment(deeplink目标片段)并且(我可以在这里处理参数,也正常工作)

问题是;有时如果应用程序在后台打开(例如我请求邮件然后按下home键),当我点击deeplink时,上一个片段会运行,而不是目标片段CreatePasswordFragment。

您对可能导致问题的原因有什么想法吗?

谢谢!

Navigation版本:2.2.0

随邮件一起发送的深度链接

 http://myurl/forgot-password/?key=sodmoq9wwdW1djkssdqMEdqlsp

导航图

 <deepLink android:id="@+id/deepLink"
    app:uri="http://myurl/forgot-password/?key={key}"/>
 <argument
    android:name="key"
    app:argType="string" />

Android清单文件

 <activity 
    ...
    android:launchMode="singleTask">
 <nav-graph android:value="@navigation/navigation_main" />
 </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:scheme="http" />

     <data android:host="myurl" />

     <data android:path="/forgot-password/" />
 </intent-filter>

你解决那个问题了吗? - mrJoe
很抱歉,@mrJoe不行。 - Mithat Sinan Sarı
我尝试通过捕获意图并显式调用 findNavController().navigate() 来手动处理深度链接,但是在此之后,我无法通过按返回键或调用 navigate() 方法从这个新片段导航到另一个片段。你有没有使用一些解决方法? - mrJoe
@MithatSinanSarı 有进展了吗? - SoH
很遗憾,不行。我们目前是手动处理的。 - Mithat Sinan Sarı
1个回答

2
有点晚了,但是为了以后的参考,引用导航组件的技术负责人Ian Lake的答案:

NavController不会覆盖您的活动中的方法,因此如果您坚持使用android:launchMode="singleTask",则需要手动调用此方法。

这是源链接:

https://dev59.com/ZLroa4cB1Zd3GeqPoaVI#61569940


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接