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
Post a Comment