AlarmManager setInexactRepeating,setWindow,setRepeating方法在工作日内从循环内调用时不会触发警报

要求: –
我需要在一周的特定日期和警报开始的日期发出警报(例如我想在2017年5月26日下午6:45开始的每周的周五和周六发出警报)

问题:-
当从循环内调用AlarmManager setInexactRepeatingsetWindowsetRepeating方法时,BroadcastReceiver的onReceive()方法不会执行。

用于此任务的代码如下: –
AndroidManifest.xml中

            <!--  -->           

ActivitySaveReminder.java

 public class ActivitySaveReminder extends AppCompatActivity{ onCreate() { fireAlarmOnWeekDays(); } public void fireAlarmOnWeekDays() { long[] weekDaysMillisecondsArr = {1495737000000l, 1495823400000l}; long[] alarmStartMillisArr = {1495801680000l}; Calendar calendar = Calendar.getInstance(); for (int i = 0; i > selected day time stamp --> "+calendar.getTime()); for (int j = 0; j = 19) { alarmManager.setWindow(AlarmManager.RTC_WAKEUP, alarmStartMillisArr[j], AlarmManager.INTERVAL_DAY * 7, pendingIntent); // alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, alarmStartMillisArr[j], AlarmManager.INTERVAL_DAY * 7, pendingIntent); // alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, alarmStartMillisArr[j], AlarmManager.INTERVAL_DAY * 7, pendingIntent); } else { alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, alarmStartMillisArr[j], AlarmManager.INTERVAL_DAY * 7, pendingIntent); } Log.d(TAG, "fireAlarmOnWeekDays: -->> alarm start time -->> "+alarmStartMillisArr[j] + " id -->> "+id); } } } } 

MedicineReminderAlarmReceiver.java

 ublic class MedicineReminderAlarmReceiver extends BroadcastReceiver { private final String TAG = "MedicineRemindrAlrmRcvr"; @Override public void onReceive(Context context, Intent intent) { if (BuildConfig.DEBUG) { Log.d(TAG, "onReceive: -->> executed"); Log.d(TAG, "onReceive: -->> System.currentTimeMillis() -->> "+ System.currentTimeMillis()); } } } 

styles.xml

  true false @color/status_bar_color @color/status_bar_color @color/blue_color @color/text_heading_color_black @color/text_heading_color_black @color/text_sub_heading_color_light_black  

strings.xml中

 ReminderSample 

试试这个代码它适用于星期五警报,同样你可以设置星期六首先你需要注册你的警报接收器和闹钟时间

 public static void SetAlarmForFriday(Context mContext) { try { Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY); System.out.println("Date " + calendar.getTime()); int year = calendar.get(Calendar.YEAR); int month = calendar.get(Calendar.MONTH) + 1; int day = calendar.get(Calendar.DAY_OF_MONTH); String DateToConvert = day + "," + month + "," + year + " 10:10 AM"; Date date = new SimpleDateFormat("dd,MM,yyyy hh:mm a", Locale.ENGLISH).parse(DateToConvert); Intent intent = new Intent(mContext, AlarmReceiver.class); intent.setAction("setYourActionHere"); PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext.getApplicationContext(), 234324243, intent, 0); AlarmManager alarmManager = (AlarmManager) mContext.getSystemService(mContext.ALARM_SERVICE); alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, date.getTime(), AlarmManager.INTERVAL_DAY, pendingIntent); } catch (Exception ex) { ex.printStackTrace(); } } 

制作接收器类

 public class AlarmReceiver extends BroadcastReceiver { public AlarmReceiver() { } @Override public void onReceive(Context context, Intent intent) { // TODO: This method is called when the BroadcastReceiver is receiving // an Intent broadcast. } } 

在Application标签下的清单文件中注册您的广播接收器