J'ai actuellement un problème pour trouver la NavigationController
à partir d'une instance BroadcastReceiver
contexte. Lorsque j'appelle findNavigationController()
de n'importe où ailleurs dans le Fragment
il navigue sans problème, mais lorsque je l'appelle depuis le contexte de l'application onReceive
l'application se bloque avec l'exception suivante
Caused by: java.lang.IllegalArgumentException: navigation destination app.eventcloud.events:id/action_documents_list_fragment_to_document_viewer_fragment is unknown to this NavController
at androidx.navigation.NavController.navigate(NavController.java:633)
at androidx.navigation.NavController.navigate(NavController.java:592)
at app.eventcloud.root.gui.screens.knowledgehub.DocumentsListFragment.handleDownloadCompleted(DocumentsListFragment.kt:97)
at app.eventcloud.root.gui.screens.knowledgehub.DocumentsListFragment.access$handleDownloadCompleted(DocumentsListFragment.kt:26)
at app.eventcloud.root.gui.screens.knowledgehub.DocumentsListFragment$receiver$1.onReceive(DocumentsListFragment.kt:143)
at android.app.LoadedApk$ReceiverDispatcher$Args.lambda$getRunnable$0(LoadedApk.java:1391)
at android.app.-$$Lambda$LoadedApk$ReceiverDispatcher$Args$_BumDX2UKsnxLVrE6UJsJZkotuA.run(Unknown Source:2)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Le code à l'origine du problème est le suivant.
private val receiver: BroadcastReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
val action = intent.action
if (DownloadManager.ACTION_DOWNLOAD_COMPLETE == action) {
...
val filePath = cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI))
val bundle = Bundle()
bundle.putString("file_path", filePath)
findNavController().navigate(R.id.action_documents_list_fragment_to_document_viewer_fragment, bundle)
...
}
}
}
J'ai essayé d'obtenir le NavigationController
à partir d'un contexte extérieur à l BroadcastReceiver
J'ai toujours le même problème. Avez-vous des idées ?