android - updating textview in an activity from a service -
below example updating textiviews in activity service via broadcast receiver want send calculated bandwidth usage service text views in other activity, have tried approach not working (it shows package names in text fields)
broadcast service (transmitter)
public class broadcastservice extends service { private static final string tag = "broadcastservice"; public static final string broadcast_action = "com.websmithing.broadcasttest.displayevent"; private final handler handler = new handler(); intent intent; int counter = 0; @override public void oncreate() { super.oncreate(); intent = new intent(broadcast_action); } @override public void onstart(intent intent, int startid) { handler.removecallbacks(sendupdatestoui); handler.postdelayed(sendupdatestoui, 1000); // 1 second } private runnable sendupdatestoui = new runnable() { public void run() { displaylogginginfo(); handler.postdelayed(this, 10000); // 10 seconds } }; private void displaylogginginfo() { log.d(tag, "entered displaylogginginfo"); intent.putextra("time", new date().tolocalestring()); intent.putextra("counter", string.valueof(++counter)); sendbroadcast(intent); } @override public ibinder onbind(intent intent) { return null; } @override public void ondestroy() { handler.removecallbacks(sendupdatestoui); super.ondestroy(); } }
broadcast service (receiver)
public class broadcasttest extends activity { private static final string tag = "broadcasttest"; private intent intent; @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); intent = new intent(this, broadcastservice.class); } private broadcastreceiver broadcastreceiver = new broadcastreceiver() { @override public void onreceive(context context, intent intent) { updateui(intent); } }; @override public void onresume() { super.onresume(); startservice(intent); registerreceiver(broadcastreceiver, new intentfilter(broadcastservice.broadcast_action)); } @override public void onpause() { super.onpause(); unregisterreceiver(broadcastreceiver); stopservice(intent); } public void ohh(view view) { intent intent = new intent(this, broadcastservice.class); startactivity(intent); } private void updateui(intent intent) { string counter = intent.getstringextra("time"); string time = intent.getstringextra("counter"); log.d(tag, counter); log.d(tag, time); textview txtdatetime = (textview) findviewbyid(r.id.txtdatetime); textview txtcounter = (textview) findviewbyid(r.id.txtcounter); txtdatetime.settext(time); txtcounter.settext(counter); } }
bandwidth usage calculator
public class main extends activity { private handler mhandler = new handler(); private long mstartrx = 0; private long mstarttx = 0; @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); mstartrx = trafficstats.gettotalrxbytes(); mstarttx = trafficstats.gettotaltxbytes(); if (mstartrx == trafficstats.unsupported || mstarttx == trafficstats.unsupported) { alertdialog.builder alert = new alertdialog.builder(this); alert.settitle("uh oh!"); alert.setmessage("your device not support traffic stat monitoring."); alert.show(); } else { mhandler.postdelayed(mrunnable, 1000); } } private final runnable mrunnable = new runnable() { public void run() { textview rx = (textview)findviewbyid(r.id.rx); textview tx = (textview)findviewbyid(r.id.tx); long rxbytes = trafficstats.gettotalrxbytes()- mstartrx; rx.settext(long.tostring(rxbytes)); long txbytes = trafficstats.gettotaltxbytes()- mstarttx; tx.settext(long.tostring(txbytes)); mhandler.postdelayed(mrunnable, 1000); } }; }
my approach
public class broadcastservice extends service { private static final string tag = "broadcastservice"; public static final string broadcast_action = "com.websmithing.broadcasttest.displayevent"; private final handler handler = new handler(); intent intent; int counter = 0; private handler mhandler = new handler(); private long mstartrx = 0; private long mstarttx = 0; @override public void oncreate() { super.oncreate(); intent = new intent(broadcast_action); mstartrx = trafficstats.gettotalrxbytes(); mstarttx = trafficstats.gettotaltxbytes(); if (mstartrx == trafficstats.unsupported || mstarttx == trafficstats.unsupported) { alertdialog.builder alert = new alertdialog.builder(this); alert.settitle("uh oh!"); alert.setmessage("your device not support traffic stat monitoring."); alert.show(); } else { mhandler.postdelayed(mrunnable, 1000); } } private final runnable mrunnable = new runnable() { public void run() { // textview rx = (textview)findviewbyid(r.id.rx); // textview tx = (textview)findviewbyid(r.id.tx); long rxbytes = trafficstats.gettotalrxbytes()- mstartrx; // rx.settext(long.tostring(rxbytes)); long txbytes = trafficstats.gettotaltxbytes()- mstarttx; // tx.settext(long.tostring(txbytes)); mhandler.postdelayed(mrunnable, 1000); } }; @override public void onstart(intent intent, int startid) { handler.removecallbacks(sendupdatestoui); handler.postdelayed(sendupdatestoui, 1000); // 1 second } private runnable sendupdatestoui = new runnable() { public void run() { displaylogginginfo(); handler.postdelayed(this, 10000); // 10 seconds } }; private void displaylogginginfo() { log.d(tag, "entered displaylogginginfo"); intent.putextra("time", new date().tolocalestring()); intent.putextra("counter", string.valueof(++counter)); sendbroadcast(intent); } @override public ibinder onbind(intent intent) { return null; } @override public void ondestroy() { handler.removecallbacks(sendupdatestoui); super.ondestroy(); } }
i having problem in transmitting value of "rxbytes" , "txbytes" in line intent.putextra("counter", string.valueof(++counter));
their values not being used highlighted yellow
Comments
Post a Comment