5

我正在尝试使用新的导航组件 API v1.0.0-alpha05 实现深度链接功能,但遇到了问题。

使用 Android Studio 3.3 金丝雀 7

我的navigation_graph.xml 的一部分

<fragment
    android:id="@+id/noteDetailFragment"
    android:name="com.myapp.notes.notedetail.NoteDetailFragment"
    android:label="@string/label_note_detail"
    tools:layout="@layout/note_detail_fragment">

    <argument
        android:name="noteId"
        android:defaultValue="0"
        app:argType="integer" />

    <action
        android:id="@+id/action_noteDetail_to_editNote"
        app:destination="@id/editNoteFragment" />

    <deepLink
        android:id="@+id/noteDetailDeepLink"
        app:uri="notesapp://notes/{noteId}" />
</fragment>

AndroidManifest.xml 包含:

    <activity android:name=".presentation.MainActivity">
        <nav-graph android:value="@navigation/navigation_graph" />
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

我正在测试我的深层链接adb shell am start -a android.intent.action.VIEW -d "notesapp://notes/2" com.myapp.notes

两者noteId都不存在NoteDetailFragmentArgs.fromBundle(arguments).noteIdor (在两种情况下都返回arguments?.getInt("noteId", 0)默认值)0

打印出 Bundle 表明它在那里:

[{android-support-nav:controller:deepLinkIntent=Intent { act=android.intent.action.VIEW dat=notesapp://notes/2 flg=0x1000c000 pkg=com.mynotes.notes cmp=com.mynotes.notes.presentation.MainActivity }, noteId=2}]

如果深度链接 uri 为 http://www.mynotes.com/notes/2

如何访问noteIdwhen deeplinking?谢谢!

4

3 回答 3

9

根据这个问题,从深层链接解析的参数仅arguments作为字符串添加到捆绑包中。

因此,您应该通过检索 noteIdarguments?.getString("noteId")?.toInt()直到该问题得到解决。

于 2018-09-05T01:40:56.853 回答
1

该问题已在 android.arch.navigation 1.0.0-alpha09 中修复。

Bug修复

参数现在可以从深层链接正确解析为正确的 argType 而不是始终作为字符串b/110273284

Arch 组件发行说明:https ://developer.android.com/jetpack/docs/release-notes

于 2018-12-24T21:04:07.093 回答
0

Android 导航库将始终将占位符参数解析为字符串,除非该类型在导航图中显式声明为参数。

对于 的占位符{noteId},通过将参数声明为整数来接收作为整数传递的参数。

<argument
    android:name="id"
    app:argType="integer"
    android:defaultValue="0" />
于 2019-02-25T21:27:41.670 回答