【问题标题】:Android App Static Shortcut with Navigation Library带有导航库的 Android 应用静态快捷方式
【发布时间】:2019-02-08 20:23:38
【问题描述】:

我的应用有一个静态快捷方式,我正在使用导航架构组件。

我正在使用以下实现,但它不适用于 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)
    }
}

快捷方式.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(...)

有没有给定的方法来实现带有导航组件的应用快捷方式,或者我在这里做错了什么?

【问题讨论】:

  • 您预计会发生什么? popBackStack() 回去 - 你的意思是打电话给 navigate() 吗?

标签: android kotlin android-architecture-components android-jetpack android-appshortcut


【解决方案1】:

导航不支持单独由intent.action 进行深度链接。但是,您可以android:data 元素添加到您的&lt;intent&gt; 元素,然后将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 添加一个 &lt;deepLink&gt; 元素:

<fragment
  android:id="@+id/add_book_entry_fragment"
  android:name=".AddBookEntryFragment">
  <deepLink app:uri="moneybook://add_book_entry" />
</fragment>

【讨论】:

  • 谢谢,这绝对是最干净的解决方案!
猜你喜欢
  • 1970-01-01
  • 2021-04-19
  • 2012-06-30
  • 1970-01-01
  • 2015-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多