android - How to set an alarm inside a broadcastreceiver -


in app there's option user make event repeat, , each recurrence of repeating event have notification (an alarm) remind user event start.

so when first alarm gets called, opens broadcastreceiver, creates notification , should set alarm next recurrence:

    @override public void onreceive(context context, intent intent) {     // when onreceive gets called event notification triggered     databasehelper mydatabasehelper = new databasehelper(context);          // create notification         int id = intent.getintextra("id", 0);         string name = intent.getstringextra("name");         long notificationtime = intent.getlongextra("notificationtime", 0);         string recurrencetype = intent.getstringextra("recurrencetype");         string message = intent.getstringextra("message");          if (recurrencetype.equals("every week")) {             // repeatinterval = unix timestamp * 1000 in millis notificationtime             long repeatinterval = 604800 * 1000;             notificationtime += repeatinterval;             mydatabasehelper.updatenotificationtime(notificationtime);             setalarm(context, intent, id, name, notificationtime, recurrencetype, message);         } else {             mydatabasehelper.updatenotificationtime(0);         }          createnotification(context, message, name, id);     } } 

now works fine first alarm of event. notification created. when second alarm gets called intent empty, after first alarm other intents empty , empty notification created app crashes nullpointerexception. note: i'm keeping app open , device. setalarm(...) method inside broadcastreceiver class.

how set alarms:

    public void setalarm(context context, intent intent, int id, string name, long notificationtime, string recurrencetype, string message){     alarmmanager alarmmanager = (alarmmanager) context.getsystemservice(context.alarm_service);     intent intentalarm = new intent(context, alarmreceiver.class);     intent.putextra("id", id);     intent.putextra("name", name);     intent.putextra("notificationtime", notificationtime);     intent.putextra("recurrencetype", recurrencetype);     intent.putextra("message", message);     // pendingintent specifies action take in future [context, request code, intent, flag]     pendingintent pendingintent = pendingintent.getbroadcast(context, id, intentalarm, pendingintent.flag_update_current);     // rtc_wakeup wake device when goes off     alarmmanager.set(alarmmanager.rtc_wakeup, notificationtime, pendingintent); } 

stacktrace:

08-25 12:12:35.917 19323-19323/com.madgusto.when2game e/androidruntime: fatal exception: main                                                                     process: com.madgusto.when2game, pid: 19323                                                                     java.lang.runtimeexception: unable start receiver com.madgusto.when2game.alarm.alarmreceiver: java.lang.nullpointerexception: attempt invoke virtual method 'boolean java.lang.string.equals(java.lang.object)' on null object reference                                                                         @ android.app.activitythread.handlereceiver(activitythread.java:3018)                                                                         @ android.app.activitythread.-wrap18(activitythread.java)                                                                         @ android.app.activitythread$h.handlemessage(activitythread.java:1544)                                                                         @ android.os.handler.dispatchmessage(handler.java:102)                                                                         @ android.os.looper.loop(looper.java:154)                                                                         @ android.app.activitythread.main(activitythread.java:6077)                                                                         @ java.lang.reflect.method.invoke(native method)                                                                         @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:866)                                                                         @ com.android.internal.os.zygoteinit.main(zygoteinit.java:756)                                                                      caused by: java.lang.nullpointerexception: attempt invoke virtual method 'boolean java.lang.string.equals(java.lang.object)' on null object reference                                                                         @ com.madgusto.when2game.alarm.alarmreceiver.onreceive(alarmreceiver.java:48)                                                                         @ android.app.activitythread.handlereceiver(activitythread.java:3011)                                                                         @ android.app.activitythread.-wrap18(activitythread.java)                                                                          @ android.app.activitythread$h.handlemessage(activitythread.java:1544)                                                                          @ android.os.handler.dispatchmessage(handler.java:102)                                                                          @ android.os.looper.loop(looper.java:154)                                                                          @ android.app.activitythread.main(activitythread.java:6077)                                                                          @ java.lang.reflect.method.invoke(native method)                                                                          @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:866)                                                                          @ com.android.internal.os.zygoteinit.main(zygoteinit.java:756)  

so null pointer @ :

if (recurrencetype.equals("every week")) { 

now how go on set alarm inside broadcastreceiver correct way? thanks!

it pretty clear happening. @ code:

intent intentalarm = new intent(context, alarmreceiver.class); intent.putextra("id", id); intent.putextra("name", name); intent.putextra("notificationtime", notificationtime); intent.putextra("recurrencetype", recurrencetype); intent.putextra("message", message); pendingintent pendingintent = pendingintent.getbroadcast(context, id, intentalarm, pendingintent.flag_update_current); 

you create intent in variable intentalarm, put "extras" intent using variable intent. pass intentalarm argument pendingintent.getbroadcast(). of course intentalarm doesn't have "extras" in it.

try putting "extras" in intentalarm instead.


Comments

Popular posts from this blog

What is happening when Matlab is starting a "parallel pool"? -

angular - DownloadURL return null in below code -

php - Cannot override Laravel Spark authentication with own implementation -