java - 广播接收器仅响应一天
问题描述
我想每天收到 namaz 时间的通知。假设 5 wakth namaj 通知。因此,我制作了一个应用程序并使用广播接收器在后台工作,并在确切时间到达时向我发送通知。我的应用程序在一天内运行良好。过了一天后,它不再向我发送通知。我在这里附上我的代码
Calendar c1 = Calendar.getInstance();
Calendar c2 = Calendar.getInstance();
Calendar c3 = Calendar.getInstance();
Calendar c4 = Calendar.getInstance();
Calendar c5 = Calendar.getInstance();
Calendar c6 = Calendar.getInstance();
c1.set(c1.get(Calendar.YEAR), c1.get(Calendar.MONTH), c1.get(Calendar.DAY_OF_MONTH), 4, 5, 0);
c2.set(c2.get(Calendar.YEAR), c2.get(Calendar.MONTH), c2.get(Calendar.DAY_OF_MONTH), 5, 30, 0);
c3.set(c3.get(Calendar.YEAR), c3.get(Calendar.MONTH), c3.get(Calendar.DAY_OF_MONTH), 12, 21, 0);
c4.set(c4.get(Calendar.YEAR), c4.get(Calendar.MONTH), c4.get(Calendar.DAY_OF_MONTH), 16, 10, 0);
c5.set(c5.get(Calendar.YEAR), c5.get(Calendar.MONTH), c5.get(Calendar.DAY_OF_MONTH), 17, 30, 0);
c6.set(c6.get(Calendar.YEAR), c6.get(Calendar.MONTH), c6.get(Calendar.DAY_OF_MONTH), 19, 10, 0);
setAlarm(c1.getTimeInMillis(), "Tahajjud");
setAlarm(c2.getTimeInMillis(), "Fojor");
setAlarm(c3.getTimeInMillis(), "Juhur");
setAlarm(c4.getTimeInMillis(), "Asor");
setAlarm(c5.getTimeInMillis(), "Magrib");
setAlarm(c6.getTimeInMillis(), "Esha");
我的 setAlarm 方法是
String namajText = namaj;
AlarmManager alarmManager =(AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(BackgroundNotificationOnTime.this,MyAlarm2.class);
intent.putExtra("Namaj", namajText);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this,count,intent,PendingIntent.FLAG_ONE_SHOT);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,timeInMillis,AlarmManager.INTERVAL_DAY,pendingIntent);
count++;
那是我的 onReceive 方法
String namajText = intent.getStringExtra("Namaj");
int nId = 0;
NotificationCompat.Builder builder = new NotificationCompat.Builder(context)
.setSmallIcon(R.mipmap.ic_launcher)
.setContentTitle("Namaj Alert")
.setContentText(namajText+" namaj wakth started.")
.setAutoCancel(true)
.setDefaults(NotificationCompat.DEFAULT_ALL);
Uri path = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
builder.setSound(path);
NotificationManager notificationManager = (NotificationManager) context.getApplicationContext().getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(nId,builder.build());
解决方案
你用PendingIntent.FLAG_ONE_SHOT
你的PendingIntent
,这就是为什么每个警报只触发一次。因此,您需要使用另一个值来重复警报,例如 0。
从文档中PendingIntent.FLAG_ONE_SHOT
:
指示此 PendingIntent 只能使用一次的标志。用于 getActivity(Context, int, Intent, int)、getBroadcast(Context, int, Intent, int) 和 getService(Context, int, Intent, int)。
如果设置,则在调用 send() 后,它将自动为您取消,并且将来通过它发送的任何尝试都将失败。
推荐阅读
- docker - Oracle 18c xe docker 映像无法启动
- python-3.x - 我的代码没有打印 MIXED 值,而逻辑是字母和数字的 ascii 值
- ios - 是否可以在 IOS 上从 Apple Wallet 访问交易?
- python - Python 3.9:IsoCalendarDate 数据的 unpickling 返回一个元组
- mongodb - 如何避免在使用 CQRS 的事件源、事件驱动架构中重复类型定义?
- sql - 安排雪花任务每月运行一次
- python - 如何提高 Python 中并行循环的效率
- flutter - Flutter:如何解析HTML属性中的“title”数据并在ListView中显示?
- ios - 线程 1:致命错误:索引超出范围
- asp.net - 当文件位于不同文件夹中时,如何解决 HTTPS 安全性受损(Http 和 Https 混合内容错误)?