如何从通知中打开 Jetpack 导航片段?
How to open Jetpack Navigation Fragment from Notification?
我在我的项目中使用 Jetpack Navigation,下图描述了我的导航。在我的应用程序中 Home Fragment
是我的 NavHostFragment
,我在 Fragment A
中使用前台服务。当我从 Home Fragment
导航到 Fragment A
并关闭应用程序或最小化前台服务 运行 并发出通知时。当我按下通知 Home fragment
打开但我希望 Fragment A
将打开并且所有返回堆栈将被保存。我在通知中使用 MainActivity
作为 PendingIntent
,我的所有导航片段都在其中工作。
找了半天,终于找到解决办法了。在这种情况下,将使用 Deeplinking
。并将 PendingIntent
从 MainActivity
更改为您的目的地 FragmentA
。
nav_graph.xml
<fragment
android:id="@+id/fragmentA"
android:name="com.example.FragmentA"
android:label="Fragment A"
tools:layout="@layout/fragment_a">
<action
.../>
<deepLink
android:id="@+id/deepLink"
app:uri="www.example.com" />
</fragment>
AndroidManifest.xml
<application
...>
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<nav-graph android:value="@navigation/nav_graph"/>
</activity>
</application>
PendingIntent
val pendingIntent = NavDeepLinkBuilder(context)
.setGraph(R.navigation.nav_graph)
.setDestination(R.id.fragment_a)
.createPendingIntent()
我在我的项目中使用 Jetpack Navigation,下图描述了我的导航。在我的应用程序中 Home Fragment
是我的 NavHostFragment
,我在 Fragment A
中使用前台服务。当我从 Home Fragment
导航到 Fragment A
并关闭应用程序或最小化前台服务 运行 并发出通知时。当我按下通知 Home fragment
打开但我希望 Fragment A
将打开并且所有返回堆栈将被保存。我在通知中使用 MainActivity
作为 PendingIntent
,我的所有导航片段都在其中工作。
找了半天,终于找到解决办法了。在这种情况下,将使用 Deeplinking
。并将 PendingIntent
从 MainActivity
更改为您的目的地 FragmentA
。
nav_graph.xml
<fragment
android:id="@+id/fragmentA"
android:name="com.example.FragmentA"
android:label="Fragment A"
tools:layout="@layout/fragment_a">
<action
.../>
<deepLink
android:id="@+id/deepLink"
app:uri="www.example.com" />
</fragment>
AndroidManifest.xml
<application
...>
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<nav-graph android:value="@navigation/nav_graph"/>
</activity>
</application>
PendingIntent
val pendingIntent = NavDeepLinkBuilder(context)
.setGraph(R.navigation.nav_graph)
.setDestination(R.id.fragment_a)
.createPendingIntent()