android - Sending Intent from BroadcastReceiver class to currently running activity -
i have class extends broadcastreceiver
. on receiving sms, pass information main activity class display text in box (append, if text present).
public class smsreceiver extends broadcastreceiver { @override public void onreceive(context context, intent intent) { intent = new intent(context, mainactivity.class); i.putextra("updatedstring","hello"); context.startactivity(i); } }
mainactivity.java
public class mainactivity extends activity{ private textview results; @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); bundle extras = getintent().getextras(); if(extras!=null){ results = (textview) findviewbyid(r.id.results); results.setvisibility(view.visible); results.append(extras.getstring("updatedstring")); } }
i have 1 activity class (mainactivity.java
). when exception unable pause activity.
you have 3 ways:
1) can define broadcast inside mainactivity
this:
in oncreate()
registerreceiver(smsreceiver, new intentfilter(sms_recieved));
and define smsreciver in mainactivity
private broadcastreceiver smsreceiver = new broadcastreceiver() { @override public void onreceive(context context, intent intent) { //you can update textbox here handler.postdelayed(sendupdatestoui, 10); } };
define runnable update ui
private runnable sendupdatestoui = new runnable() { public void run() { update(); } };
and update method
private void update(string text) { textview.settext(textview.gettext().tostring() + text); }
2) register receiver between activity , broadcastreceiver
3) start activity new intent update current open activity
intent intent = new intent(context, mainactivity.class); intent.putextra("key", "text"); intent.setflags(intent.flag_activity_new_task); context.startactivity(intent);
update :
explain method 2
mainactivity.class
in onresume()
registerreceiver(broadcastreceiver, new intentfilter(smsreceiver.broadcast_action));
in ondestroy()
unregisterreceiver(broadcastreceiver);
local broadcast (broadcastreceiver, in mainactivity.class)
private broadcastreceiver broadcastreceiver = new broadcastreceiver() { @override public void onreceive(context context, intent intent) { updateui(intent); } }; private void updateui(intent intent) { string text = intent.getstringextra("key"); textview.settext(textview.gettext().tostring() + text); }
smsreceiver.class
global attribute
public static final string broadcast_action = "your.package.name.displayevent"; private final handler handler = new handler(); intent intent; context context;
in onreceive()
handler.removecallbacks(sendupdatestoui); handler.postdelayed(sendupdatestoui, 10); this.context = context;//you can retrieve context onreceive argument this.intent = new intent(broadcast_action);
define 2 method
private runnable sendupdatestoui = new runnable() { public void run() { display(); } }; private void display() { intent.putextra("key", text); context.sendbroadcast(intent); }
Comments
Post a Comment