Android 推送通知未触发

问题描述 投票:0回答:1

我正在开发一个Android提醒应用程序。该应用程序应允许用户安排任务并在任务截止日期临近时收到提醒。但 Android 推送通知未触发。基本上 createNotificationChannel 没有被触发。

以下是完整代码:

    import android.app.NotificationChannel
    import android.app.NotificationManager
    import android.content.Context
    import android.os.Build
    import android.os.Bundle
    import android.widget.Toast
    import androidx.appcompat.app.AppCompatActivity
    import androidx.core.app.NotificationCompat
    import androidx.core.app.NotificationManagerCompat
    import kotlinx.android.synthetic.main.activity_main.*
    import java.text.SimpleDateFormat
    import java.util.*

    class MainActivity : AppCompatActivity() {

        private val tasks = mutableListOf<Task>()

        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)

            // Button click listener to add a new task
            addTaskButton.setOnClickListener {
                addTask()
            }

            // Simulate some tasks for demonstration
            tasks.add(Task("Task 1", "Description 1", getDate(1)))
            tasks.add(Task("Task 2", "Description 2", getDate(2)))
            tasks.add(Task("Task 3", "Description 3", getDate(3)))

            // Show tasks in the list view
            showTasks()
        }

        private fun addTask() {
            val title = taskTitleEditText.text.toString()
            val description = taskDescriptionEditText.text.toString()
            val deadline = taskDeadlineEditText.text.toString()

            if (title.isNotEmpty() && deadline.isNotEmpty()) {
                val task = Task(title, description, deadline)
                tasks.add(task)
                showTasks()

                // Schedule a reminder for the task deadline
                scheduleReminder(task)

                // Clear input fields
                taskTitleEditText.text.clear()
                taskDescriptionEditText.text.clear()
                taskDeadlineEditText.text.clear()
            } else {
                Toast.makeText(this, "Please enter title and deadline for the task", Toast.LENGTH_SHORT).show()
            }
        }

        private fun showTasks() {
            val adapter = TaskAdapter(this, tasks)
            taskListView.adapter = adapter
        }

        private fun scheduleReminder(task: Task) {
        val calendar = Calendar.getInstance()
        val sdf = SimpleDateFormat("yyyy-MM-dd HH:mm", Locale.getDefault())
        calendar.time = sdf.parse(task.deadline)!!

        // Check if the deadline is in the past
        if (calendar.timeInMillis < System.currentTimeMillis()) {
            val notificationId = tasks.indexOf(task)
            val builder = NotificationCompat.Builder(this, "task_reminder")
                .setSmallIcon(R.drawable.ic_notification)
                .setContentTitle("Task Reminder")
                .setContentText("Don't forget to complete ${task.title}")
                .setPriority(NotificationCompat.PRIORITY_DEFAULT)

            createNotificationChannel()

            with(NotificationManagerCompat.from(this)) {
                notify(notificationId, builder.build())
            }
            }
        }

        private fun createNotificationChannel() {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                val name = "Task Reminder"
                val descriptionText = "Reminder for pending tasks"
                val importance = NotificationManager.IMPORTANCE_DEFAULT
                val channel = NotificationChannel("task_reminder", name, importance).apply {
                    description = descriptionText
                }
                val notificationManager: NotificationManager =
                    getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
                notificationManager.createNotificationChannel(channel)
            }
        }

        private fun getDate(daysToAdd: Int): String {
            val calendar = Calendar.getInstance()
            calendar.add(Calendar.DAY_OF_YEAR, daysToAdd)
            val sdf = SimpleDateFormat("yyyy-MM-dd HH:mm", Locale.getDefault())
            return sdf.format(calendar.time)
        }
    }


 data class Task(val title: String, val description: String, val deadline: String)

createNotificationChannel 没有被触发

android push-notification android-push-notification notificationmanager
1个回答
0
投票

检查截止日期是否在未来

if (calendar.timeInMillis > System.currentTimeMillis())

更改逻辑后修复了它。


完整功能如下:

private fun scheduleReminder(task: Task) {
        val calendar = Calendar.getInstance()
        val sdf = SimpleDateFormat("yyyy-MM-dd HH:mm", Locale.getDefault())
        calendar.time = sdf.parse(task.deadline)!!

        if (calendar.timeInMillis > System.currentTimeMillis()) {
            val notificationId = tasks.indexOf(task)
            val builder = NotificationCompat.Builder(this, "task_reminder")
                .setSmallIcon(R.drawable.ic_notification)
                .setContentTitle("Task Reminder")
                .setContentText("Don't forget to complete ${task.title}")
                .setPriority(NotificationCompat.PRIORITY_DEFAULT)

            createNotificationChannel()

            with(NotificationManagerCompat.from(this)) {
                notify(notificationId, builder.build())
            }
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.