轻触从WorkManager发送的通知时,使用导航组件启动特定片段 [英] Launch a particular Fragment using Navigation component when tapped on Notification that is sent from WorkManager
本文介绍了轻触从WorkManager发送的通知时,使用导航组件启动特定片段的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在根据 Worker的条件向用户发送每日通知使用BroadcastReceiver启动.在Worker
中,我只有context
可以发送通知.
I'm sending a daily notification to the user based on a condition from the Worker that is launched using BroadcastReceiver. From Worker
I only have context
for sending notification.
NotificationCompat.Builder(context, CHANNEL_ID).apply {
setContentTitle(...)
setContentText(...)
setContentIntent(pendingIntent(context))
}.build()
如何使用导航组件创建PendingIntent
以启动特定片段?
How do I create PendingIntent
for launching a particular fragment using Navigation component?
我尝试过:
fun pendingIntent(context: Context): PendingIntent {
val navController = NavController(context.applicationContext)
navController.setGraph(R.navigation.your_navigation)
return navController.createDeepLink()
.setDestination(R.id.yourFragment)
.createPendingIntent()
}
但是我得到以下例外情况:
But I get following exceptions:
Caused by: java.lang.RuntimeException: Exception inflating package.name:navigation/your_navigation line 7
at androidx.navigation.NavInflater.inflate(NavInflater.java:90)
at androidx.navigation.NavController.setGraph(NavController.java:425)
at androidx.navigation.NavController.setGraph(NavController.java:407)
at
......
at package.name.Worker.doWork(Worker.kt:15)
at androidx.work.Worker$1.run(Worker.java:85)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at java.lang.Thread.run(Thread.java:761)
Caused by: java.lang.IllegalStateException: Could not find Navigator with name "fragment". You must call NavController.addNavigator() for each navigation type.
at androidx.navigation.NavigatorProvider.getNavigator(NavigatorProvider.java:98)
at androidx.navigation.NavInflater.inflate(NavInflater.java:100)
at androidx.navigation.NavInflater.inflate(NavInflater.java:132)
at androidx.navigation.NavInflater.inflate(NavInflater.java:81)
at androidx.navigation.NavController.setGraph(NavController.java:425)
at androidx.navigation.NavController.setGraph(NavController.java:407)
at package.name.NotificationKt.pendingIntent(Notification.kt:57)
at package.name.buildNotificationFor(Notification.kt:50)
at package.name.showNotificationFor(Notification.kt:22)
at package.name.doWork(Worker.kt:15)
at androidx.work.Worker$1.run(Worker.java:85)
推荐答案
fun pendingIntent(context: Context): PendingIntent {
return NavDeepLinkBuilder(context)
.setGraph(R.navigation.your_navigation)
.setDestination(R.id.android)
.createPendingIntent()
}
这篇关于轻触从WorkManager发送的通知时,使用导航组件启动特定片段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文