在片段错误中管理onClick通知

问题描述

我的通知所做的是向用户显示一张图片,说“嘿,看,您的图片已正确保存”。

我想要的是,当用户单击通知时,带他去查看图像,以便他可以通过whatsapp或通过电子邮件快速共享图像。(这已经是他/她的电话,我不要只分享就好了)

首先,我从Fragment调用函数。有一个ActivityMain活动可以管理:片段登录->其他片段->片段点->片段导出

正是从此Export片段发送了通知。为了从一个片段到另一个片段,我使用了安全的参数和导航图:

Spots.kt

[...]

spotsFinal = filteredSpots.toTypedArray()

val action = SpotsDirections.actionSpotsToExport(spotsFinal )
findNavController().navigate(action)

导出片段发挥作用,将图像保存到URI,然后创建通知

    private fun notifyUser(screenshot: Bitmap) {

        if (!isChannelCreated) {
            createChannel()
        }

        val mBuilder = NotificationCompat.Builder(requireContext(),EVENT_CHANNEL_ID)
            .setSmallIcon(R.drawable.ic_launcher_foreground)
            .setContentTitle("MyApp")
            .setContentText("Exportation completed!")
            .setPriority(NotificationCompat.PRIORITY_DEFAULT)
            // Set the intent that will fire when the user taps the notification
            .setContentIntent(pendingIntent)
            .setAutoCancel(true)
            .setLargeIcon(screenshot)
            .setStyle(
                NotificationCompat.BigPictureStyle().bigPicture(screenshot).bigLargeIcon(null)
            )

        val notification = mBuilder.build()
        val notificationmanagerCompat = notificationmanagerCompat.from(requireContext())
        notificationmanagerCompat.notify(1,notification)
    }

    private fun createChannel() {
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
            channel = NotificationChannel(
                EVENT_CHANNEL_ID,"Plant Events",notificationmanager.IMPORTANCE_DEFAULT
            )
            channel.description = "I dunno"
            channel.lightColor = Color.GREEN
            val notificationmanager = getSystemService(
                requireContext(),notificationmanager::class.java
            )
            notificationmanager!!.createNotificationChannel(channel)
            isChannelCreated = true
        }
    }

要处理通知,我使用以下代码(这是出现错误代码):

val pendingIntent: PendingIntent = PendingIntent.getActivity(this.requireContext(),intent,0)

val intent = Intent(requireContext(),MainActivity::class.java).apply {
        flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
        setAction(android.content.Intent.ACTION_VIEW)
        setDataAndType(imageUri,"image/*")
        addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
    }

错误如下:

2020-09-04 00:41:33.804 26762-26762/com.example.spotmanager E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.spotmanager,PID: 26762
    androidx.fragment.app.Fragment$InstantiationException: Unable to instantiate fragment com.example.spotmanager.maps.ExportarColeccion: calling Fragment constructor caused an exception
        at androidx.fragment.app.Fragment.instantiate(Fragment.java:566)
        at androidx.fragment.app.FragmentContainer.instantiate(FragmentContainer.java:57)
        at androidx.fragment.app.FragmentManager$3.instantiate(FragmentManager.java:390)
        at androidx.navigation.fragment.FragmentNavigator.instantiateFragment(FragmentNavigator.java:132)
        at androidx.navigation.fragment.FragmentNavigator.navigate(FragmentNavigator.java:162)
        at androidx.navigation.fragment.FragmentNavigator.navigate(FragmentNavigator.java:58)
        at androidx.navigation.NavController.navigate(NavController.java:1049)
        at androidx.navigation.NavController.navigate(NavController.java:935)
        at androidx.navigation.NavController.navigate(NavController.java:868)
        at androidx.navigation.NavController.navigate(NavController.java:854)
        at androidx.navigation.NavController.navigate(NavController.java:1107)
        at com.example.spotmanager.fragments.Spots$onoptionsItemSelected$2$1.onClick(Spots.kt:1604)
        at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:174)
        at android.os.Handler.dispatchMessage(Handler.java:112)
        at android.os.Looper.loop(Looper.java:216)
        at android.app.ActivityThread.main(ActivityThread.java:7625)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:987)
     Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Constructor.newInstance0(Native Method)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
        at androidx.fragment.app.Fragment.instantiate(Fragment.java:548)
        at androidx.fragment.app.FragmentContainer.instantiate(FragmentContainer.java:57) 
        at androidx.fragment.app.FragmentManager$3.instantiate(FragmentManager.java:390) 
        at androidx.navigation.fragment.FragmentNavigator.instantiateFragment(FragmentNavigator.java:132) 
        at androidx.navigation.fragment.FragmentNavigator.navigate(FragmentNavigator.java:162) 
        at androidx.navigation.fragment.FragmentNavigator.navigate(FragmentNavigator.java:58) 
        at androidx.navigation.NavController.navigate(NavController.java:1049) 
        at androidx.navigation.NavController.navigate(NavController.java:935) 
        at androidx.navigation.NavController.navigate(NavController.java:868) 
        at androidx.navigation.NavController.navigate(NavController.java:854) 
        at androidx.navigation.NavController.navigate(NavController.java:1107) 
        at com.example.spotmanager.fragments.Spots$onoptionsItemSelected$2$1.onClick(Spots.kt:1604) 
        at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:174) 
        at android.os.Handler.dispatchMessage(Handler.java:112) 
        at android.os.Looper.loop(Looper.java:216) 
        at android.app.ActivityThread.main(ActivityThread.java:7625) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:987) 
     Caused by: java.lang.IllegalStateException: Fragment ExportarColeccion{2749dc4} (d6e97f1d-fb76-4f54-bedc-5632e77e7aa8)} not attached to a context.
        at androidx.fragment.app.Fragment.requireContext(Fragment.java:805)
        at com.example.spotmanager.maps.ExportarColeccion.<init>(ExportarColeccion.kt:293)
        at java.lang.reflect.Constructor.newInstance0(Native Method) 
        at java.lang.reflect.Constructor.newInstance(Constructor.java:343) 
        at androidx.fragment.app.Fragment.instantiate(Fragment.java:548) 
        at androidx.fragment.app.FragmentContainer.instantiate(FragmentContainer.java:57) 
        at androidx.fragment.app.FragmentManager$3.instantiate(FragmentManager.java:390) 
        at androidx.navigation.fragment.FragmentNavigator.instantiateFragment(FragmentNavigator.java:132) 
        at androidx.navigation.fragment.FragmentNavigator.navigate(FragmentNavigator.java:162) 
        at androidx.navigation.fragment.FragmentNavigator.navigate(FragmentNavigator.java:58) 
        at androidx.navigation.NavController.navigate(NavController.java:1049) 
        at androidx.navigation.NavController.navigate(NavController.java:935) 
        at androidx.navigation.NavController.navigate(NavController.java:868) 
        at androidx.navigation.NavController.navigate(NavController.java:854) 
        at androidx.navigation.NavController.navigate(NavController.java:1107) 
        at com.example.spotmanager.fragments.Spots$onoptionsItemSelected$2$1.onClick(Spots.kt:1604) 
        at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:174) 
        at android.os.Handler.dispatchMessage(Handler.java:112) 
        at android.os.Looper.loop(Looper.java:216) 
        at android.app.ActivityThread.main(ActivityThread.java:7625) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:987) 

出了什么问题?如何修复它并使它正常工作?

非常感谢您

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)