5

新しいナビゲーション コンポーネント API v1.0.0-alpha05 を使用してディープリンク機能を実装しようとしていますが、問題が発生しています。

Android Studio 3.3 Canary 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).noteId場合もarguments?.getInt("noteId", 0)デフォルト値の0が返されます)。

バンドルを印刷すると、そこにあることがわかります。

[{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

noteIdディープリンク時に にアクセスするにはどうすればよいですか? ありがとう!

4

3 に答える 3

9

この問題によると、ディープ リンクから解析された引数は、argumentsバンドルに文字列としてのみ追加されます。

arguments?.getString("noteId")?.toInt()したがって、その問題が修正されるまで、noteId を取得する必要があります。

于 2018-09-05T01:40:56.853 に答える
1

この問題は android.arch.navigation 1.0.0-alpha09 で修正されました。

バグの修正

引数は、常に文字列としてではなく、正しい argType としてディープ リンクから適切に解析されるようになりましたb/110273284

Arch コンポーネントのリリース ノート: https://developer.android.com/jetpack/docs/release-notes

于 2018-12-24T21:04:07.093 に答える