我的应用程序有一个静态快捷方式,我正在使用导航体系结构组件。
我正在使用以下实现,但在Android 9上不起作用。
在我的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>
调试应用程序时,我注意到调用了findNavController(...)
方法,但屏幕上没有任何反应。
此外,我不会覆盖onStart(...)
或onResume(...)
。
是否有给定的方法来通过导航组件实现应用程序快捷方式,或者我在这里做错了什么?
答案 0 :(得分:3)
导航仅靠intent.action
不支持深层链接。但是,您可以 将android:data
元素添加到<intent>
元素,然后将add a implicit deep link添加到导航图。这样,您无需编写任何特定代码即可处理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文件中,为同一URL添加一个<deepLink>
元素:
<fragment
android:id="@+id/add_book_entry_fragment"
android:name=".AddBookEntryFragment">
<deepLink app:uri="moneybook://add_book_entry" />
</fragment>