Only First Alarm is set on reboot, no matter time has passed or not(android) -


i'm new android , trying create event reminder app reading books , tutorials. please excuse me if duplicate question searched on forum , couldn't solution problem. alarms triggered when device on. when device reboots in onreceive reads data database , set alarms calling setreminder() method , fires first alarm no matter whether time has reached or not , not show notification other alarm (although must show second , third one). have added permission , receiver in manifest. code onbootreceiver

    public class onbootreceiver extends broadcastreceiver     {        private static final string tag = componentinfo.class.getcanonicalname();        @override        public void onreceive(context context, intent intent)        {           remindermanager remindermgr = new remindermanager(context);           remindersdbadapter dbhelper = new remindersdbadapter(context);           dbhelper.open();            cursor cursor = dbhelper.fetchallreminders();           if(cursor != null)           {             cursor.movetofirst();             int rowidcolumnindex = cursor.getcolumnindex(remindersdbadapter.key_rowid);             int datetimecolumnindex = cursor.getcolumnindex(remindersdbadapter.key_dt);              while(cursor.isafterlast() == false)             {               log.d(tag, "adding alarm boot.");               log.d(tag, "row id column index - " + rowidcolumnindex);               log.d(tag, "date time column index - " + datetimecolumnindex);               long rowid = cursor.getlong(rowidcolumnindex);               log.d(tag, "rowid - " + rowid);               string datetime = cursor.getstring(datetimecolumnindex);               calendar cal = calendar.getinstance();               simpledateformat format = new simpledateformat(displaymessageactivity.date_time_format);               try {                 java.util.date date = format.parse(datetime);                 log.d(tag, "date- " + date);                 cal.settime(date);                 remindermgr.setreminder(rowid, cal);                 } catch (java.text.parseexception e) {                  log.e("onbootreceiver", e.getmessage(), e);                  }              cursor.movetonext();             }             cursor.close() ;            }           dbhelper.close();          }          }          } 

remindermanager

    public class remindermanager     {       private static final string tag = componentinfo.class.getcanonicalname();       private context mcontext;       private alarmmanager malarmmanager;       public remindermanager(context context)       {           mcontext = context;           malarmmanager = (alarmmanager)context.getsystemservice(context.alarm_service);        }         public void setreminder(long taskid, calendar when)        {            log.d(tag, "when: "+when);            log.d("remindermanage", "rowid: "+taskid);            intent = new intent(mcontext, onalarmreceiver.class);            i.putextra(remindersdbadapter.key_rowid, (long)taskid);            pendingintent pi = pendingintent.getbroadcast(mcontext, 0, i, pendingintent.flag_one_shot);            malarmmanager.set(alarmmanager.rtc_wakeup, when.gettimeinmillis(), pi);            }         } 

there multiple problems in code:

1) use database in broadcast receiver it's not idea, better start intent service , work there;

2) calling setreminder in loop using pending instance because using 0 , flag_one_shoot. if want create multiple pending intents need create , pass method unique id each time.


Comments

Popular posts from this blog

c# - Validate object ID from GET to POST -

node.js - Custom Model Validator SailsJS -

php - Find a regex to take part of Email -