问题描述
如何在特定日期和时间设置离线提醒。 我在我的应用程序中使用了 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 (将#修改为@)