java - AlarmManager responding at wrong time -


sorry if answered before, looked everywhere didn't proper solution

i using alarmmanager automatically fire notification @ 9am everyday, when try run on emulator executes immediately, , every half hour (31-32min precise) after instead of once @ 9am everyday.

any ideas why? appreciated.

code below:

public class home extends activity {  @override protected void oncreate(bundle savedinstancestate) {     super.oncreate(savedinstancestate);     setcontentview(r.layout.activity_bsheet);      notificationalert(savedinstancestate);  }      private void notificationalert(bundle savedinstancestate) {      alarmmanager manager;     pendingintent pendingintent;     intent intent=new intent(home.this, notify.class);     manager=(alarmmanager)getsystemservice(alarm_service);     pendingintent=pendingintent.getservice(home.this,             0, intent, 0);     gregoriancalendar gcal = new gregoriancalendar();     gcal.set(calendar.hour_of_day, 9);     gcal.set(calendar.minute, 0);     gcal.set(calendar.second, 0);     gcal.set(calendar.millisecond, 0);      long inittime = gcal.gettimeinmillis();      manager.setrepeating(alarmmanager.rtc_wakeup, inittime,             24*60*60*1000, pendingintent); }  } 

cheers,

edit: intention that, once app installed, fires alarm @ 9am. have put alarm in oncreate, im not sure if alarm being created everytime start app , weird happening when hide app... again insight appreciated!

manager.setrepeating(alarmmanager.rtc_wakeup, inittime, 24*60*60*1000, pendingintent); 

alarm manager fire immidiatly if inittime < system.currenttimemillis()

from docs:

if time occurs in past, alarm triggered immediately, alarm count depending on how far in past trigger time relative repeat interval.

according code you've provided, gcal.gettimeinmillis() return millisecods corresponding today 9.00. if you'll try run code after time, inittime less current system time triggers immidiate run of alarmmanager.

to fix this, example, can add 1 day calendar before passing gcal.gettimeinmillis() if in past point tomorrow 9.00 let run tomorrows morning

update1

tried code , worked expected me - fired service every 10 seconds:

    @override protected void oncreate(bundle savedinstancestate) {     super.oncreate(savedinstancestate);     initmanager(); } private void initmanager() {     alarmmanager manager;     pendingintent pendingintent;     intent intent = new intent(this, notifyservice.class);     manager=(alarmmanager)getsystemservice(alarm_service);     pendingintent=pendingintent.getservice(this, 0, intent, 0);      long inittime = system.currenttimemillis() + 5000;      manager.setrepeating(alarmmanager.rtc_wakeup, inittime,             10*1000, pendingintent);         } 

however can use option: there alarmmanager.set() method can fire this

long runtime = /* calendar time + 24 hours in millis*/ manager.set(alarmmanager.rtc_wakeup, runtime, pendingintent);        

so fire service @ runtime. , in service invoke same method recalculated runtime day that:

public mainactivity extends activity{      protected oncreate(bundle bundle){         ....         initmanager();     }      private initmanager(){         ...         long runtime = /* time of first alarm/notification/whatever develope */          intent intent = new intent(this, notifyservice.class);         pendingintent=pendingintent.getservice(this, 0, intent, 0);         manager.set(alarmmanager.rtc_wakeup, runtime, pendingintent);     } } 

and service:

public notifyservice extends service{     ...     public int onstartcommand(...){          ...         /* stuff */          intent intent = new intent(getapplicationcontext(), notifyservice.class);         pendingintent=pendingintent.getservice(this, 0, intent, 0);         long runtime = /* recalculate according next time of firing service*/         manager.set(alarmmanager.rtc_wakeup, runtime, pendingintent);      } 

}

so service register intent in alarmmanager everytime service fires.


Comments

Popular posts from this blog

How to mention the localhost in android -

php - Calling a template part from a post -