Android隐式深层链接:Intent中的null额外内容

问题描述 投票:0回答:1

我想使用导航组件创建隐式深层链接。

但是,当我使用以下URL启动我的应用程序时:

https://my-app.com/cars/ef123-aaf33/parts

我收到以下错误:

java.lang.RuntimeException: Unable to start activity ComponentInfo{myapp/screens.car.CarActivity}: java.lang.IllegalStateException: 

Activity screens.car.CarActivity@3b8d354 has null extras in Intent { act=android.intent.action.VIEW cat=[android.intent.category.BROWSABLE] dat=https://my-app.com/... flg=0x13008000 cmp=myapp/screens.car.CarActivity }

该意图没有任何附加功能,但它应包含在深层链接中定义为URL占位符的carUuid。一旦计算出navArgs(),就会引发错误。

这是我的设置:

nav_graph.xml

<fragment
    android:id="@+id/fragment_parts"
    android:name="myapp.screens.parts.PartsFragment"
    android:label="@string/parts"
    tools:layout="@layout/fragment_parts">
    <deepLink
        android:id="@+id/deepLink"
        app:uri="my-app.com/cars/{carUuid}/parts" />
    <argument
        android:name="carUuid"
        app:argType="string" />
</fragment>

AndroidManifest

<activity android:name=".screens.car.CarActivity" >
    <nav-graph android:value="@navigation/nav_graph" />
</activity>

CarActivity

class CarActivity : AppCompatActivity() {


    private val carViewModel: CarViewModel by viewModel { parametersOf(args.carUuid) }

    private val args: CarActivityArgs by navArgs()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        DataBindingUtil.setContentView<ActivityCarBinding>(this, R.layout.activity_car).also { binding ->
        binding.lifecycleOwner = this
        binding.carViewModel = carViewModel
    }

}

有用的链接:

Android documentation for implicit DeepLinks

On DeepLinks by RayWenderlich

android android-intent android-jetpack android-navigation android-deep-link
1个回答
0
投票

请在您的deepLink中尝试此操作:

<fragment
    android:id="@+id/fragment_parts"
    android:name="myapp.screens.parts.PartsFragment"
    android:label="@string/parts"
    tools:layout="@layout/fragment_parts">
    <argument
        android:name="carUuid"
        app:argType="string" />
    <deepLink
        android:id="@+id/deepLink"
        app:uri="my-app.com/cars/{carUuid}/parts" >
    </deepLink>
</fragment>
© www.soinside.com 2019 - 2024. All rights reserved.