问题描述
我的通知所做的是向用户显示一张图片,说“嘿,看,您的图片已正确保存”。
我想要的是,当用户单击通知时,带他去查看图像,以便他可以通过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 (将#修改为@)