Статический ярлык приложения Android с навигационной библиотекой
У моего приложения есть один статический ярлык, и я использую компонент архитектуры навигации.
Я использую следующую реализацию, но она не работает на Android 9.
В моей основной деятельности:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
setupToolbar()
setupNavigationDrawer()
checkPermissions()
if (intent.action == MoneyBook.SHORTCUT_ACTION_ADD_BOOKENTRY) {
findNavController(R.id.nav_host_fragment).popBackStack(R.id.action_entriesFragment_to_newBookEntryFragment, false)
}
}
shortcuts.xml:
<shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
<shortcut
android:enabled="true"
android:icon="@drawable/ic_shortcut_addbookentry"
android:shortcutId="shortcut_addbookentry"
android:shortcutLongLabel="@string/shortcut_addbookentry_label_short"
android:shortcutShortLabel="@string/shortcut_addbookentry_label_short">
<intent
android:action="at.guger.moneybook.action.ADD_BOOKENTRY"
android:targetClass="at.guger.moneybook.activity.MainActivity"
android:targetPackage="at.guger.moneybook.dev" />
</shortcut>
</shortcuts>
При отладке приложения я заметил, что findNavController(...)
метод вызывается, но на экране ничего не происходит.
Далее я не отменяю onStart(...)
или же onResume(...)
,
Есть ли какой-либо способ реализовать ярлыки приложений с компонентом навигации, или я делаю что-то ужасно неправильно здесь?
1 ответ
Навигация не поддерживает глубокую связь intent.action
в одиночестве. Тем не менее, вы можете добавить android:data
элемент к вашему <intent>
элемент, а затем добавить неявную глубокую ссылку на ваш график навигации. Делая это, вам не придется писать какой-либо конкретный код для обработки намерения.
Например, измените shortcuts.xml
добавить android:data
атрибут:
<intent
android:action="at.guger.moneybook.action.ADD_BOOKENTRY"
android:targetClass="at.guger.moneybook.activity.MainActivity"
android:targetPackage="at.guger.moneybook.dev"
android:data="moneybook://add_book_entry" />
и в своем XML-файле навигационной диаграммы добавьте <deepLink>
элемент для того же URL:
<fragment
android:id="@+id/add_book_entry_fragment"
android:name=".AddBookEntryFragment">
<deepLink app:uri="moneybook://add_book_entry" />
</fragment>