java - Android - Call a function from outside an activity (through AlarmManager and Notification) -


ok, have main activity called 'main.java'. main activity starts alarmmanager fires intent leading 'alarmreceiver.java'. 'alarmreceiver.java' creates notification has 2 buttons on it. 1 of buttons deletion button, , when user clicks on button, intent fired, leading 'delpair.java'.

in delpair.java, modify table in database, need ui of main.java reflect change. have created 2 functions in main.java called updatearrayfromdb() , updateuifromarray() me:

  • updatearrayfromdb() sync arraylist created in main.java table in db.
  • updateuifromarray() change ui of main.java represent arraylist has been changed.

the problem cannot call these 2 functions delpair.java (they don't exist in space). have come across serializables in trying find answer don't know enough know if apply here or how implement them across alarmmanager and notificationmanager.

how can access these methods delpair.java?

in main.java:

public void updatearrayfromdb(){     //... code long , irrelevant } public void updateuifromarray(){     //... code long , irrelevant }  private void sendnotification() {     intent intent = new intent(this, alarmreceiver.class); //...      pendingintent sender = pendingintent.getbroadcast(this, 2 , intent, pendingintent.flag_update_current);     alarmmanager = (alarmmanager) getsystemservice(alarm_service);     am.setrepeating(alarmmanager.rtc_wakeup, 5000, notif_freq, sender); } 

in alarmreceiver.java:

intent delpairi = new intent(context, delpair.class); pendingintent delpairpi = pendingintent.getservice(context, 0, delpairi, pendingintent.flag_update_current);  notification noti; noti = new notification.builder(context)         //...         .addaction(r.drawable.ic_delete_icon, "delete thing", delpairpi)         .build();  notificationmanager notificationmanager = (notificationmanager) context.getsystemservice(context.notification_service); notificationmanager.notify(0, noti); 

and in delpair.java:

public class delpair extends intentservice { //...     @override     protected void onhandleintent(final intent intent) { //...         intent = new intent(intent.action_close_system_dialogs);         getapplicationcontext().sendbroadcast(it);          handler.post(new runnable() {             @override             public void run() {     //... here update database, works                 //now need update ui , array in main.java                 updatearrayfromdb();    //these lines                 updateuifromarray();    //obviously don't work              }         });     } } 

why not use broadcasts ? in onhandleintent send broadcast

intent = new intent(); i.setaction(custom_intent); //put relevant data in intent getapplicationcontext().sendbroadcast(i); 

the broadcast receiver:

public class incomingreceiver extends broadcastreceiver {     private mainactivity act;     public incomingreceiver(mainactivity main){         this.act = act;     }     @override     public void onreceive(context context, intent intent) {         if (intent.getaction().equals(custom_intent)) {             system.out.println("got intent");             // call method on act         }     } } 

in activity onresume - register new incomingreceiver, onpause unregister

    private incomingreceiver receiver;     public void oncreate(bundle bos){         //other codes         receiver = new incomingreceiver(this);     }     @override     protected void onresume() {         intentfilter filter = new intentfilter();         filter.addaction(custom_intent);          registerreceiver(receiver, filter);         super.onresume();     }      @override     protected void onpause() {         unregisterreceiver(receiver);         super.onpause();     } 

Comments