5

I had a massive reading and still I think there is not a clear/complete Answer to this question.

First some stuff to clarify : this question is not concern with battery saving on phone but more about precise timing and I Am a newbie in Android.

Now let me explain the question in more depth. I have a Alarm manager that will invoke a toast (for simplicity) on given interval (every 2 minutes) manager.setRepeating(AlarmManager.RTC_WAKEUP,System.currentTimeMillis(), interval, pendingIntent); The above will invoke a onReceive() methode on a BroadcastReciver.

public class AlarmReceiver extends BroadcastReceiver  {
@Override
public void onReceive(Context context, Intent intent) {
    //Toast ....bala blah
   }}

Now This was exact interval on API<19 however In API=>19 setRepeating() is not exact anymore ! I found some people suggested (on the other forms) to use setExact(). but there is no example or clear explanation on how to use setExact() in Interval (or I could not find that). As far as I understood setExact() is on off action unlike setRepeating() so according to some others next schedule needs to be set through onReceive() (again I could not find an example ;( . Anyhow this is where I am now . And I really Appreciate any comment or suggestion or link or example ...

I hope I asked my question clear enough, by the way if there is another approach to this (for running a task on precise intervals in API>19 please let me know too) Many thanks

bastami82
  • 5,955
  • 7
  • 33
  • 44
  • check this indirect [post](http://stackoverflow.com/questions/27795873/android-show-a-dialog-when-the-internet-gps-loses-connectivity-or-is-not-connect/27796949#27796949) or the direct [post](http://stackoverflow.com/questions/25570024/repeat-service-task/25570326#25570326) in response to another approach – Elltz Feb 02 '15 at 01:23
  • not exact any more. damn thats a problem fro me as iam making an alarm app – filthy_wizard Apr 28 '15 at 12:46

1 Answers1

9

You can use setExact similarly to setRepeating.

void scheduleAlarm(Context context) {
    AlarmManager alarmMgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
    Intent yourIntent = new Intent();
    //TODO configure your intent
    PendingIntent alarmIntent = PendingIntent.getBroadcast(context, MyApplication.ALARM_REQUEST_CODE, yourIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    alarmMgr.setExact(AlarmManager.RTC_WAKEUP, timeToWakeUp, alarmIntent);
}

The two differences are:

  1. The timing will be exact (or as nearly as possible)
  2. You will have to schedule the next occurrence in the onReceive of your BroadcastReceiver.

      public class AlarmReceiver extends BroadcastReceiver  {
      @Override
      public void onReceive(Context context, Intent intent) {
        //TODO process alarm
        scheduleAlarm(context);
      }}
    
Hartok
  • 2,147
  • 20
  • 37