我想使用导航组件创建一个隐式深层链接。
但是当我使用以下 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 }
Intent 没有任何额外内容,但它应该包含carUuid
在深度链接中定义为 URL 占位符。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>
汽车活动
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
}
}
有用的链接:
- - 更新 - -
我创建了一个最小的示例项目,并找到了关于发生/出错的提示。我在官方问题跟踪器上发布了所有内容: https ://issuetracker.google.com/issues/155690730