Android: Broadcastreceiver with Achartengine ,don't display updates -
i'm trying display information got wifi scan broadcast receiver ,into bar chart using achartengine. want have real time chart ,every time receive data onreceive() method ,i update chart. achaeive ,i create chart objects in onreceive() method .but chart first result ,there no update ,although can see changes on wifi scan. know problem. this code i'm using:
public class wifichartsrealtime extends activity { linearlayout layout; list<int[]> values = new arraylist<int[]>(); //list<scanresult> classobject = new arraylist<scanresult>(); int [ ] [ ] center_frequency_2 = { { 1,2,3,4,5,6,7,8,9,10,11,12,13,14 }, { 2412, 2417, 2422, 2427, 2432,2437,2442,2447,2452 ,2457,2462,2467,2472,2484}, }; wifimanager wifi; button enab; string resultsstring ; string[] mystringarray; int aa = 10; public class receiver extends broadcastreceiver{ @override public void onreceive(context context, intent intent) { int length ; if(intent.getaction().equals(wifimanager.scan_results_available_action)){ list<scanresult> results = wifi.getscanresults(); length=results.size(); toast.maketext(getapplicationcontext(), "resultsstring***************** :"+results , toast.length_long) .show(); toast.maketext(getapplicationcontext(), "length1 :"+length , toast.length_long) .show(); log.i("length1",length +""); xymultipleseriesrenderer renderer = gettruitonbarrenderer(results.size()); mychartsettings(renderer); /* intent intent1 = chartfactory.getbarchartintent(wifichartsrealtime.this,gettruitonbardataset(),renderer,type.default); startactivity(intent1);*/ graphicalview mchartview = chartfactory.getbarchartview(wifichartsrealtime.this, gettruitonbardataset( results), renderer, type.stacked); layout.addview(mchartview); // mchartview.refreshdrawablestate(); mchartview.repaint(); } } } @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_wifi_charts_real_time); layout = (linearlayout) findviewbyid(r.id.chart); connectivitymanager cxmgr = (connectivitymanager)getsystemservice(context.connectivity_service); wifi = (wifimanager)getsystemservice(context.wifi_service); receiver receiver = new receiver(); registerreceiver(receiver,new intentfilter(connectivitymanager.connectivity_action)); registerreceiver(receiver,new intentfilter(wifimanager.scan_results_available_action)); } private xymultipleseriesdataset gettruitonbardataset( list<scanresult> classobject) { int series_nr ; //the number of columns display, arraylist<string> legendtitles = new arraylist<string>(); xymultipleseriesdataset dataset = new xymultipleseriesdataset(); toast.maketext(getapplicationcontext(), "position xymultipleseriesdataset:"+classobject , toast.length_long) .show(); toast.maketext(getapplicationcontext(), "size xymultipleseriesdataset:"+classobject.size() , toast.length_long) .show(); // length = classobject.size(); (int j=0;j<classobject.size();j++){ values.add(new int[] { classobject.get(j).level}); //every serie concern access point , contain 1 rssi } (int k = 0; k < classobject.size(); k++) { legendtitles.add(classobject.get(k).ssid);//every serie have legend ssid } //determination des canaux int[] channelstab = new int[classobject.size()]; for(int i=0;i<classobject.size();i++){ if (classobject.get(i).frequency /1000 == 2) { (int j =0;j<14;j++) { if (center_frequency_2[1][j] == classobject.get(i).frequency) channelstab[i]= center_frequency_2[0][j] ; } } } //fin determination des canaux series_nr = classobject.size() ;//number of access point (int = 0; < series_nr; i++) {//loop every series categoryseries series = new categoryseries(legendtitles.get(i)); int[] v = values.get(i); int serieslength = v.length; dataset.addseries(series.toxyseries()); (int k = 0; k < serieslength; k++) { log.i("stoop series_nr",series_nr+""); log.i("stoop ii",i+""); log.i("stoop",k+""); log.i("stoop",v[k]+""); log.i("stoop",v[k] / 10+""); /* xyseries tempserie = dataset.getseriesat(i); tempserie.add(i, 40 - v[k] %10);*/ switch (v[k] / 10){ case -9 : //series.add(classobject[k]); if (v[k] %10 == 0) //series.add(40); {xyseries tempserie = dataset.getseriesat(i); tempserie.add(channelstab[i], 30); tempserie.addannotation(legendtitles.get(i)+":"+v[k], channelstab[i], 30); } else //series.add(40 - v[k] %10); {xyseries tempserie = dataset.getseriesat(i); tempserie.add(channelstab[i], 30 - v[k] %10); tempserie.addannotation(legendtitles.get(i)+":"+v[k] , channelstab[i], 30 - v[k] %10); } break; case -8 : //series.add(classobject[k]); if (v[k] %10 == 0) //series.add(40); {xyseries tempserie = dataset.getseriesat(i); tempserie.add(channelstab[i], 40); tempserie.addannotation(legendtitles.get(i)+":"+v[k], channelstab[i], 40); } else //series.add(40 - v[k] %10); {xyseries tempserie = dataset.getseriesat(i); tempserie.add(channelstab[i], 40 - v[k] %10); tempserie.addannotation(legendtitles.get(i)+":"+v[k], channelstab[i], 40 - v[k] %10); } break; case -7 : //series.add(classobject[k]); if (v[k] %10 == 0) { xyseries tempserie = dataset.getseriesat(i); tempserie.add(channelstab[i], 50); tempserie.addannotation(legendtitles.get(i)+":"+v[k], channelstab[i], 50); } else //series.add(50 - v[k] %10); {xyseries tempserie = dataset.getseriesat(i); tempserie.add(channelstab[i],50 - v[k] %10); tempserie.addannotation(legendtitles.get(i)+":"+v[k], channelstab[i], 50 - v[k] %10); // series.toxyseries().add(7.5,50 - v[k] %10); } break; case -6 : //series.add(classobject[k]); if (v[k] %10 == 0) //series.add(60); {xyseries tempserie = dataset.getseriesat(i); tempserie.add(channelstab[i], 60); tempserie.addannotation(legendtitles.get(i)+":"+v[k], channelstab[i], 60); } else //series.add(60 - v[k] %10); {xyseries tempserie = dataset.getseriesat(i); tempserie.add(channelstab[i], 60 - v[k] %10); tempserie.addannotation(legendtitles.get(i)+":"+v[k], channelstab[i], 60 - v[k] %10); } break; case -5 : //series.add(classobject[k]); if (v[k] %10 == 0) //series.add(70); {xyseries tempserie = dataset.getseriesat(i); tempserie.add(channelstab[i], 70); tempserie.addannotation(legendtitles.get(i)+":"+v[k], channelstab[i], 70); } else //series.add(70 - v[k] %10); {xyseries tempserie = dataset.getseriesat(i); tempserie.add(channelstab[i], 70 - v[k] %10); tempserie.addannotation(legendtitles.get(i)+":"+v[k], channelstab[i], 70 - v[k] %10); } break; case -4 : //series.add(classobject[k]); if (v[k] %10 == 0) //series.add(80); {xyseries tempserie = dataset.getseriesat(i); tempserie.add(channelstab[i], 80); tempserie.addannotation(legendtitles.get(i)+":"+v[k], channelstab[i], 80); } else {xyseries tempserie = dataset.getseriesat(i); tempserie.add(channelstab[i], 80 - v[k] %10); tempserie.addannotation(legendtitles.get(i)+":"+v[k], channelstab[i], 80 - v[k] %10); } break; case -3 : //series.add(classobject[k]); if (v[k] %10 == 0) {xyseries tempserie = dataset.getseriesat(i); tempserie.add(channelstab[i], 90); tempserie.addannotation(legendtitles.get(i)+":"+v[k], channelstab[i], 90); } else //series.add(90 - v[k] %10); {xyseries tempserie = dataset.getseriesat(i); tempserie.add(channelstab[i], 90 - v[k] %10); tempserie.addannotation(legendtitles.get(i)+":"+v[k], channelstab[i], 90 - v[k] %10); } break; } } } return dataset; } public xymultipleseriesrenderer gettruitonbarrenderer(int length) { xymultipleseriesrenderer renderer = new xymultipleseriesrenderer(); renderer.setaxistitletextsize(10); renderer.setcharttitletextsize(20); renderer.setlabelstextsize(10); renderer.setlegendtextsize(10); renderer.setmargins(new int[] { 30, 40, 15, 0 }); (int k = 0; k < length; k++) { log.i("simpleseriesrenderer" ,k+""); simpleseriesrenderer r = new simpleseriesrenderer(); r.setcolor(color.rgb((int)(math.random() * 255), (int)(math.random() * 255), (int)math.random() * 255)); renderer.addseriesrenderer(r); } return renderer; } @suppresswarnings("deprecation") private void mychartsettings(xymultipleseriesrenderer renderer) { renderer.setcharttitle("wifi channels"); renderer.setxaxismin(-1); renderer.setxaxismax(16); renderer.setyaxismin(20); renderer.setyaxismax(100); renderer.addxtextlabel(1, "1"); renderer.addxtextlabel(2, "2"); renderer.addxtextlabel(3, "3"); renderer.addxtextlabel(4, "4"); renderer.addxtextlabel(5, "5"); renderer.addxtextlabel(6, "6"); renderer.addxtextlabel(7, "7"); renderer.addxtextlabel(8, "8"); renderer.addxtextlabel(9, "9"); renderer.addxtextlabel(10, "10"); renderer.addxtextlabel(11, "11"); renderer.addxtextlabel(12, "12"); renderer.addxtextlabel(13, "13"); renderer.addxtextlabel(14, "14"); renderer.addytextlabel(0, ""); renderer.addytextlabel(20, "-100"); renderer.addytextlabel(30, "-90"); renderer.addytextlabel(40, "-80"); renderer.addytextlabel(50, "-70"); renderer.addytextlabel(60, "-60"); renderer.addytextlabel(70, "-50"); renderer.addytextlabel(80, "-40"); renderer.addytextlabel(90, "-30"); renderer.addytextlabel(100, ""); renderer.setpanenabled(true, true); renderer.setzoomenabled(true, true); renderer.setapplybackgroundcolor(true); renderer.setbackgroundcolor(color.black); renderer.setylabelsalign(align.right); renderer.setbarspacing(0.5); renderer.setxtitle("canal du wifi"); renderer.setytitle("puissance du signal[dbm]"); renderer.setshowgrid(true); renderer.setgridcolor(color.gray); renderer.setxlabels(0); // sets number of integer labels appear renderer.setxlabels((int) 0.5);//25 renderer.setylabels(10); renderer.setbarwidth(10);// bar width renderer.setxlabelsalign(align.left); } }
well resolved problem ,to have eal time chart (bar chart ) ,i have change tho onreceive method bellow.i hope someone.
public void onreceive(context context, intent intent) { wifimanager wifiman=(wifimanager)wifichartsrealtime.this.getsystemservice(context.wifi_service); wifiman.startscan(); if(intent.getaction().equals(wifimanager.scan_results_available_action)){ results = wifi.getscanresults(); length=results.size(); log.i("length1",length +""); xymultipleseriesrenderer renderer = gettruitonbarrenderer(results.size()); mychartsettings(renderer); layout = (linearlayout) findviewbyid(r.id.chart); if (mchartview != null) { layout.removeview(mchartview); } mchartview = chartfactory.getbarchartview(wifichartsrealtime.this, gettruitonbardataset( results), renderer, type.stacked); layout.addview(mchartview, 0, new layoutparams(layoutparams.match_parent, layoutparams.match_parent)); } }`
Comments
Post a Comment