So here’s the thing. I wanted my widget to run a task every 12 midnight. The attribute of Intent.ACTION_DATE_CHANGED does not work.
I had read posts in forums that say if you switch back and forth setting the date and time for experimentation to see if the task will run, nothing happens. So the only workaround left is to use an AlarmManager.
Yup, you have to use it rather than being forced to use Intent.ACTION_TIME_TICK which is battery draining as this event will occur every minute.
To set up your AlarmManager to send a broadcast every 12 midnight, do this:
PendingIntent pi = PendingIntent.getBroadcast(context, 0, new Intent(YOUR_ACTION_STRING_HERE), PendingIntent.FLAG_UPDATE_CURRENT);
Calendar calendar = Calendar.getInstance();
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC, calendar.getTimeInMillis(), 1000 * 60 *60 *24, pi);
Take note that you have to use getBroadcast() in the PendingIntent class if you want the task in the BroadcastReceiver to be executed. If it is code in a service that you want to run, then call getService().