如何在Kotlin中安排定期通知? [英] How to schedule recurring notifications in kotlin?

查看:0
本文介绍了如何在Kotlin中安排定期通知?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经找了几个小时了,但没有找到任何有用的东西。现在,我有一个活动(称为Other_Recurringreminder),它设置时间(伪造的日历,hh:mm;字符串)、重复频率(Int)、重复单位(如分钟、小时、天;字符串)、是开还是关(Bool),以及名称(字符串)

在Other_recurringreminder.kt中,我有这样的函数:

fun sendnotification()
{
     val channelID = "channel1"
     val notificationID = 1
     val sharedPreferences: SharedPreferences = getSharedPreferences("sharedPrefs", Context.MODE_PRIVATE)
     val builder = NotificationCompat.Builder(this, "channelID")
         .setSmallIcon(R.drawable.centr)
         .setColor(resources.getColor(R.color.purple))
         .setContentTitle(sharedPreferences.getString("Alarm1Name_USERPREFS", "Reminder 1"))
         .setContentText(getString(R.string.notif_recurringreminders))
         .setPriority(NotificationCompat.PRIORITY_DEFAULT)
         .setAutoCancel(true)

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

它在被调用时发送通知。 我如何才能让我的应用程序一次从共享首选项发送这条通知,标题来自SP,并从SP每x个单位重复一次? 这个函数应该在另一个Kotlin文件中吗? 即使在重启后,当我的应用程序还没有打开的时候,这也能起作用吗?如果我想用不同的值安排多个通知,我需要复制任何东西吗? 抱歉,如果这是个愚蠢的问题,我对科特林还是个新手。谢谢!

推荐答案

您可以使用警报管理器。 首先使用广播接收器创建一个类,如

                class AlarmReceiver : BroadcastReceiver() {
                
                    override fun onReceive(context: Context, intent: Intent?) {
                        Log.d("this", "notify")
                
                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                
                            val intent = Intent(context, AlarmActivity2::class.java)
                            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK)
                            val pendingIntent = PendingIntent.getActivity(context, 0, intent, 0)
                
                            val builder = NotificationCompat.Builder(context, "111")
                                .setSmallIcon(R.drawable.blue_stringart)
                                .setContentTitle("Alarm is running")
                                .setAutoCancel(true)
                                .setDefaults(NotificationCompat.DEFAULT_ALL)
                                .setDefaults(NotificationCompat.DEFAULT_SOUND)
                                .setDefaults(NotificationCompat.DEFAULT_VIBRATE)
                                .setPriority(NotificationCompat.PRIORITY_HIGH)
                                .addAction(R.drawable.ic_baseline_stop_24,"Stop",pendingIntent)
                                .setContentIntent(pendingIntent)
                
                            val notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM)
                            val r = RingtoneManager.getRingtone(context, notification)
                            r.play()
                
                            val notificationManagerCompat = NotificationManagerCompat.from(context)
                            notificationManagerCompat.notify(123, builder.build())
                
                        }
                
                    }
                
                } 
        

之后,转到Activity类Make 2方法并调用onCreate

            private fun setAlarm1() {
            var calender: Calendar
          calender = Calendar.getInstance()
                        calender.set(Calendar.HOUR_OF_DAY, PUT_YOUR_ALARM HOUR)
                        calender.set(Calendar.MINUTE, PUT_YOUR_ALARM MINUTE)
                        calender.set(Calendar.SECOND, 0)
                    alarmManager = getSystemService(Context.ALARM_SERVICE) as AlarmManager
                    val thuReq: Long = Calendar.getInstance().timeInMillis + 1
                    var reqReqCode = thuReq.toInt()
                    if (calender.timeInMillis < System.currentTimeMillis()) {
                        calender.add(Calendar.DAY_OF_YEAR, 1)
                    }
                    val alarmTimeMilsec = calender.timeInMillis
                    val intent = Intent(this, AlarmReceiver::class.java)
                    intent.setFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK)
                    val pendingIntent = PendingIntent.getBroadcast(this, reqReqCode, intent, 0)
            
                    alarmManager.setRepeating(
                        AlarmManager.RTC_WAKEUP,
                        calender.timeInMillis,
                       HERE_PUT_YOUR_HOUR * 60 * 60 * 1000,
                        pendingIntent
                    )
    
    
        private fun createNotificationChannel() {
    
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                val name = "Alarmclock Channel"
                val description = " Reminder Alarm manager"
                val importance = NotificationManager.IMPORTANCE_HIGH
                val notificationChannel = NotificationChannel(CHANNELID, name, importance)
                notificationChannel.description = description
                val notificationManager =
                    getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
                notificationManager.createNotificationChannel(notificationChannel)
            }
        }

注意-必须(转到您的应用程序设置并授予通知权限)1.alarmManager.set重复此处您可以根据需要使用您的警报类型。2.每个告警的请求码必须是唯一的。3.您必须获取闹钟时间并保存在Calender.timeInMillis您期望的闹钟时间。

下面仍有问题备注

这篇关于如何在Kotlin中安排定期通知?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆