我想使用导航组件创建隐式深层链接。
但是,当我使用以下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
}
}
有用的链接:
请在您的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>