[英]Broadcast receiver responding just for one day
我想每天收到有關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()之后,它將自動為您取消,並且以后嘗試通過它發送的任何嘗試都會失敗。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.