AlarmManagerをつかって指定時刻に通知をしたいと考えています
通知の内容については下のようにインテントにputExtra関数でつけ、onReceive側で取り出すということをしたいと考えています
val alarmManager = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager val intent = Intent(context, AttendanceNotificationReceiver::class.java) intent.putExtra(course_data, data) val calendar = dateIdToTime(data.dateId) val pendingIntent = PendingIntent.getBroadcast( context, data.dateId, intent, PendingIntent.FLAG_UPDATE_CURRENT ) alarmManager.setExact( AlarmManager.RTC, calendar.timeInMillis, pendingIntent )
ですがレシーバー側で取り出そうとしたところ、以下のようにエラーが発生しました
E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.hoge_hoge, PID: 11015 java.lang.RuntimeException: Unable to start receiver com.example.hoge_hoge.notification.AttendanceNotificationReceiver: java.lang.NullPointerException: null cannot be cast to non-null type com.example.hoge_hoge.data.CourseLog
toString関数を使い、intentの中身をみたところ以下のようになっておりextrasはついているようです
D/hoge hoge: Intent { flg=0x14 cmp=com.example.tannitorerukun/.notification.AttendanceNotificationReceiver (has extras) }
どなたか解決方法をご存じの方がいらっしゃいましたら教えていただきたいです
また、そもそもやりかたが間違っている、もっといい方法があるなどございましたらご指摘いただけると嬉しいです
よろしくお願いします
該当のソースコード
override fun onReceive(context: Context, intent: Intent?) { sendNotification( context, intent!!.getSerializableExtra(course_data) as CourseLog ) } fun reserveNotification(context: Context, data: CourseLog){ val alarmManager = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager val intent = Intent(context, AttendanceNotificationReceiver::class.java) intent.putExtra(course_data, data) val calendar = dateIdToTime(data.dateId) val pendingIntent = PendingIntent.getBroadcast( context, data.dateId, intent, PendingIntent.FLAG_UPDATE_CURRENT ) alarmManager.setExact( AlarmManager.RTC, calendar.timeInMillis, pendingIntent ) } private fun sendNotification(context: Context, data: CourseLog){ val name = "hoge hoge" val notifyDescription = "hoge hoge" val notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { val mChannel = NotificationChannel( channel_id, name, NotificationManager.IMPORTANCE_DEFAULT ).apply { description = notifyDescription } notificationManager.createNotificationChannel(mChannel) } val notification = NotificationCompat .Builder(context, channel_id) .apply { setSmallIcon(R.drawable.ic_baseline_add_circle_gray_24) setContentTitle(data.course) setContentText("hoge hoge") }.build() notificationManager.notify(data.dateId, notification) }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。