Уведомление не работает (Android Studio) - PullRequest
0 голосов
/ 15 марта 2020

Я новичок в android студии. Я пытался создать уведомление, когда пользователь, нажимающий на кнопку, встроенную в recyclerView, должен указывать время только в часах и минутах. Я принимаю пользовательский ввод в виде строки. И вход хранится в базе данных SQLite. Функция notifyMeUpdate работает нормально, но Toast в классе Receiver не отображается (я думаю, класс Receiver не запущен).

Пожалуйста, игнорируйте опечатку. Вот мой код:

class User{
    var id = 0
    var time = ""
    var amp = ""
    var text = ""
    var notifyMe = false
}

Мой класс пользователя:

fun notifyMeUpdate(user: User) {
        alarmManager = getSystemService(Context.ALARM_SERVICE) as AlarmManager      
        var hour = 0
        var min  = 0
        for(i in 0 until user.time.length) {
            if (user.time[i] == ':'){
                var str = user.time.subSequence(0, i).toString()
                var minStr = user.time.subSequence(i+1, user.time.length).toString()
                if(user.amp == "AM"){
                    hour = str.toInt()
                    min = minStr.toInt()
                }
                else{
                    hour = str.toInt() + 12
                    min = minStr.toInt()
                }
            }
        }
        val cur_cal: Calendar = GregorianCalendar()
        cur_cal.timeInMillis = System.currentTimeMillis()
        val cal: Calendar = GregorianCalendar()
        cal.add(Calendar.DAY_OF_YEAR, cur_cal[Calendar.DAY_OF_YEAR])
        cal[Calendar.HOUR_OF_DAY] = hour
        cal[Calendar.MINUTE] = min
        cal[Calendar.SECOND] = 0
        cal[Calendar.MILLISECOND] = cur_cal[Calendar.MILLISECOND]
        cal[Calendar.DATE] = cur_cal[Calendar.DATE]
        cal[Calendar.MONTH] = cur_cal[Calendar.MONTH]
        val intent = Intent(context, Receiever::class.java)
        val pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT)
        alarmManager.set(AlarmManager.RTC_WAKEUP, cal.timeInMillis, pendingIntent)
}

А вот мой класс Receiever

class Receiever: BroadcastReceiver(){
        lateinit var notificationManager: NotificationManager
        lateinit var notificationChannel: NotificationChannel
        lateinit var builder: Notification.Builder
        private var channelId = "package com.example.recyclerpractise"
        private var description = "Text Notification"
        override fun onReceive(context: Context?, intent: Intent?){
            Toast.makeText(context, "Triggred", Toast.LENGTH_SHORT).show()
            val intent =  Intent(context, LauncherActivity::class.java)
            val pintent = PendingIntent.getActivity(context, 0 , intent, PendingIntent.FLAG_UPDATE_CURRENT)
            if (context != null) {
                notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
            }
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                notificationChannel =
                    NotificationChannel(channelId, description, NotificationManager.IMPORTANCE_HIGH)
                notificationChannel.enableLights(true)
                notificationChannel.lightColor = Color.GREEN
                notificationChannel.enableVibration(true)
                notificationManager.createNotificationChannel(notificationChannel)

                if (context != null) {
                    builder = Notification.Builder(context, channelId)
                        .setContentTitle("Hello Moto")
                        .setContentText("Test Notification")
                        .setSmallIcon(R.drawable.ic_launcher_foreground)
                        .setLargeIcon(BitmapFactory.decodeResource(context.resources, R.drawable.ic_launcher_foreground))
                        .setContentIntent(pintent)
                }
                else{
                    builder = Notification.Builder(context)
                        .setContentTitle("Hello Moto")
                        .setContentText("Test Notification")
                        .setSmallIcon(R.drawable.ic_launcher_foreground)
                        .setLargeIcon(BitmapFactory.decodeResource(context?.resources, R.drawable.ic_launcher_foreground))
                        .setContentIntent(pintent)
                }
                notificationManager.notify(19867, builder.build())
            }
        }
    }

Вот мой onBindViewHolder списка переработчиков

 override fun onBindViewHolder(p0: ViewHolder, p1: Int) {
        val user: User = userList[p1]
        p0.time.text = user.time
        p0.text.text = user.text
        p0.img.setOnClickListener{
            val popup = PopupMenu(activity, p0.img)
            popup.inflate(R.menu.schedulemenu)
            popup.setOnMenuItemClickListener {

                when(it.itemId){
                    R.id.menu_delete->{
                        activity.dbHelper.deleteData(userList[p1].id.toLong())
                        activity.refreshList()
                    }
                    R.id.menu_update->{
                        activity.updateUser(userList[p1])
                    }
                    R.id.notify->{
                        activity.notifyMeUpdate(userList[p1])
                    }

                }
                true
            }
            popup.show()
        }
    }

Спасибо за помощь

1 Ответ

0 голосов
/ 15 марта 2020

Спасибо всем, кто пытался. После нескольких часов отладки. Я обнаружил, что сделал очень глупую ошибку, которая не зарегистрировала мой получатель в файле манифеста, теперь он работает нормально.

...