Я получил ответ от группы навигации и решение / обходной путь, который подходит для моего случая. Более подробную информацию, включая пример проекта, можно найти здесь
https://issuetracker.google.com/issues/155690730
ПОЧЕМУ ЭТО ПРОИСХОДИТ (ответ от системы отслеживания проблем Google)
Переход к месту назначения глубокой ссылки внутри SubActivity
определенно возможен, но во время handleDeepLink()
мы не создали объект NavDeepLink
, чтобы иметь возможность идентифицировать переменные глубинных ссылок. Кроме того, если бы мы каким-то образом смогли проанализировать шаблон URL-адреса и поместить его в качестве дополнительного намерения, в приведенном вами примере вызов by navArgs()
в SubActivity
вернул бы значение «alice», которое предназначено для место назначения глубинной ссылки, а не Activity.
Причина, по которой by navArgs()
работает в Activity, когда вы вызываете navigate () с NavDirections, заключается в том, что ActivityNavigator добавляет дополнительные функции в Intent, который используется для запуска нового Activity. Когда вы используете глубокую ссылку от adb, вы обходите все эти логические c, что означает, что намерение, запускающее действие, не имеет дополнительных функций, поэтому оно терпит неудачу, как должно.
Вероятно, есть подход лучше вложенные действия для любого вашего случая использования. При этом вы можете сделать эту работу, добавив дополнительную информацию с именем ключа к команде adb, используемой для запуска приложения по глубокой ссылке: --es "name" <"your string">.
ЧТО Я ДЕЛАЮ СЕЙЧАС
То, что я делаю сейчас, поскольку у меня есть полный контроль над URL-адресами deeplink, - это установка deeplink на саму SubActivity. Кроме того, я даю URL-адрес deeplink также информацию о том, какое назначение SubActivity должно быть установлено как startDestination.
Этот подход отлично подходит для меня. Единственным недостатком является то, что MainActivity также создается в backstack, так что пользователь сначала возвращается к этому MainActivty при нажатии кнопки возврата. Но я могу с этим жить :)