Reputation: 2524
My app has one static shortcut, and I'm using the navigation architecture component.
I'm using the following implementation but it does not work on Android 9.
In my MainActivity:
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>
When debugging the app, I noticed that the findNavController(...)
method is called, but nothing happens on the screen.
Further, I do not override onStart(...)
or onResume(...)
.
Is there any given way to implement app shortcuts with navigation component or am I doing something terribly wrong here?
Upvotes: 10
Views: 2133
Reputation: 199795
Navigation does not support deep linking by intent.action
alone. However, you can add an android:data
element to your <intent>
element and then add a implicit deep link to your navigation graph. By doing this, you won't have to write any specific code for handling the Intent.
For example, change your shortcuts.xml
to add the android:data
attribute:
<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" />
and in your navigation graph XML file, add a <deepLink>
element for the same URL:
<fragment
android:id="@+id/add_book_entry_fragment"
android:name=".AddBookEntryFragment">
<deepLink app:uri="moneybook://add_book_entry" />
</fragment>
Upvotes: 22