如何在android中设置离线提醒

问题描述

如何在特定日期和时间设置离线提醒。 我在我的应用程序中使用了 broadcastReceiver 作为通知。当我的应用程序打开时通知正在工作。当我关闭应用程序时,2 到 3 分钟后会收到通知,但如果我在 10 分钟或更长时间后设置通知时间,则该通知不起作用。我应该怎么做才能解决这个问题?

class AlarmbroadcastReceiver : broadcastReceiver() {

    override fun onReceive(context: Context?,intent: Intent?) {

        var title = "ABC"
        var desc = ""
        var notiId = Random(1000).nextInt()
        val channelId = "abc_alarm"
        val am = context!!.getSystemService(Context.NOTIFICATION_SERVICE) as notificationmanager

        if (intent!!.hasExtra("title")) {
            title = intent.getStringExtra("title").toString()
            desc = intent.getStringExtra("desc").toString()
            notiId = intent.getIntExtra("id",969)
        }

        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
            var notificationChannel = am.getNotificationChannel(channelId)
            if (notificationChannel == null) {
                val importance = notificationmanager.IMPORTANCE_HIGH
                notificationChannel = NotificationChannel(channelId,channelId,importance)
                am.createNotificationChannel(notificationChannel)
            }
        }

        val mBuilder = NotificationCompat.Builder(context,channelId)
            .setSmallIcon(R.drawable.ic_launcher)
            .setContentTitle(title)
            .setColor(ContextCompat.getColor(AppConfig.instance,R.color.colorWhite))
            .setContentText(desc)
            .setPriority(NotificationCompat.PRIORITY_MAX)

        val intent = Intent(context,HomeActivity::class.java)
        intent.putExtra(IntentValue.type,1)
        intent.flags = Intent.FLAG_ACTIVITY_SINGLE_TOP or Intent.FLAG_ACTIVITY_CLEAR_TOP
        val pendingIntent =
            PendingIntent.getActivity(context,intent,PendingIntent.FLAG_UPDATE_CURRENT)
        mBuilder.setContentIntent(pendingIntent)

        if (title.isNotEmpty() && desc.isNotEmpty()) {
            am.notify(notiId,mBuilder.build())
        }
    }
}

调用广播接收器

fun setAlarm(alarm: AlarmModel) {
    // Intent to start the broadcast Receiver
    val broadcastIntent = Intent(AppConfig.instance,AlarmbroadcastReceiver::class.java)

    broadcastIntent.putExtra("title",alarm.title)
    broadcastIntent.putExtra("desc",alarm.description)
    broadcastIntent.putExtra("id",alarm._id)
    broadcastIntent.putExtra("alarm",alarm.alarm)

    // The Pending Intent to pass in AlarmManager
    val pIntent = PendingIntent.getbroadcast(
        AppConfig.instance,alarm.timeStamp.toInt(),broadcastIntent,PendingIntent.FLAG_UPDATE_CURRENT
    )

    val alarmManager = AppConfig.instance.getSystemService(Context.ALARM_SERVICE) as AlarmManager

    alarmManager.set(
        AlarmManager.RTC_WAKEUP,alarm.timeStamp,pIntent
    )

    loge("SAVED ALARM == ${Gson().toJson(alarm)}")

}

清单文件

<receiver
       android:name=".utils.AlarmbroadcastReceiver"
       android:enabled="true"
       android:exported="true"
        android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
        <intent-filter>
           <action android:name="android.intent.action.BOOT_COMPLETED" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
  </receiver>

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)