Привет, я учусь, как использовать Android-компонент навигации, и как часть этого я делаю очень простое приложение для тренировок. У меня есть базовая навигация и передача данных между двумя экранами, но часть, на которой я застрял, - это создание глубокой связи. В настоящее время я поместил тег глубокой ссылки в место назначения (фрагмент), который в настоящее время не может быть достигнут любым другим способом. По сути, это третий экран, отдельный от двух других подключенных экранов, и глубокая ссылка - единственный способ получить к нему доступ.
Я поделился своим XML-файлом навигации ниже и своим манифестом.
Здесь находится файл навигации, соответствующий бит - последний тег фрагмента, творчески названный «firstDeepLinkFragment».
<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/navigation_graph"
app:startDestination="@id/firstFragment">
<fragment
android:id="@+id/firstFragment"
android:name="android.bignerdranch.navcontrollertest.FirstFragment"
android:label="navigation_first_fragment"
tools:layout="@layout/navigation_first_fragment" >
<action
android:id="@+id/action_firstFragment_to_secondFragment"
app:destination="@id/secondFragment"
app:enterAnim="@anim/nav_default_enter_anim"/>
</fragment>
<fragment
android:id="@+id/secondFragment"
android:name="android.bignerdranch.navcontrollertest.SecondFragment"
android:label="navigation_second_fragment"
tools:layout="@layout/navigation_second_fragment" />
<fragment
android:id="@+id/firstDeepLinkFragment"
android:name="android.bignerdranch.navcontrollertest.FirstDeepLinkFragment"
android:label="first_deeplink_fragment"
tools:layout="@layout/first_deeplink_fragment" >
<deepLink
android:id="@+id/deepLink"
app:uri="example://gizmos" />
</fragment>
</navigation>
Вот манифест.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="android.bignerdranch.navcontrollertest">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<nav-graph android:value="@navigation/navigation_graph"/>
</activity>
</application>
</manifest>
Итак, из моего понимания того, как работают глубокие ссылки в компоненте навигации, все, что мне нужно сделать, это добавить тег Deep Link к месту назначения, на которое я хочу создать ссылку, установитьURI в качестве атрибута этого тега, а затем добавьте тег nav-graph в манифест и укажите его в правом файле навигационного графика. Если я все правильно настрою, у меня должна быть правильная глубокая связь, и все будет хорошо. Проблема заключается в том, что когда я ввожу следующую команду для проверки глубокой ссылки adb shell am start -W -a android.intent.action.VIEW -d "example://gizmos/"
, вместо этого открывается действие по умолчанию, или, скорее, назначение по умолчанию (которое является фрагментом, как любое другое назначение, которое я здесь установил).
Я, честно говоря, не уверен, где я мог ошибиться, и сейчас нет тонны информации об этом, поэтому я надеялся получить совет от людей, которые ужевозился с этим. Я знаю старый способ установки глубоких ссылок, заключающийся в написании фильтров намерений в манифесте под тегом активности, на которую мы хотели связать. Но в рамках Навигационного компонента у нас теперь есть только одно основное действие, а все остальные наши экраны / пункты назначения являются фрагментами. И так как фрагменты не должны быть (и, возможно, не должны / не могут быть зарегистрированы) в манифесте, я не знаю, как я мог бы даже установить глубокую связь со старой методологией.
Так что, если бы кто-то мог помочь мне направить меня в правильном направлении, указать на любую глупую ошибку, которую я, возможно, сделал, или устранить недоразумение, я был бы очень признателен. Спасибо.