Public classGsensoractivityextendsActivityImplementsSensoreventlistener {Private Static FinalString TAG = "Gsensoractivity"; PrivateSensormanager Msensormanager; PrivateSensor Msensor; PrivateTextView textviewx; PrivateTextView Textviewy; PrivateTextView Textviewz; PrivateTextView TEXTVIEWF; Private floatMX, MY, MZ; Private LongLasttimestamp = 0; Calendar Mcalendar; PrivateGraphicalview Chart; /**Number of Curves*/ Private Static Final intSERIES_NR = 1; PrivateTimeSeries series1; PrivateXymultipleseriesdataset DataSet1; Private floatAddY =-1; Private LongADDX; /**Time Data*/date[] XCache=NewDate[20]; /**Data*/ float[] Ycache =New float[20]; @Overrideprotected voidonCreate (Bundle savedinstancestate) {Super. OnCreate (savedinstancestate); Setcontentview (R.layout.activity_gsensor); Textviewx=(TextView) Findviewbyid (R.ID.TEXTVIEW1); Textviewy=(TextView) Findviewbyid (R.ID.TEXTVIEW3); Textviewz=(TextView) Findviewbyid (R.ID.TEXTVIEW4); TEXTVIEWF=(TextView) Findviewbyid (R.ID.TEXTVIEW2); Lasttimestamp=System.currenttimemillis (); LinearLayout Layout=(LinearLayout) Findviewbyid (r.id.linearlayout); //Generate chartChart = Chartfactory.gettimechartview ( This, Getdatedemodataset (), Getdemorenderer (),"Hh:mm:ss"); Layout.addview (Chart,NewLayoutparams (Layoutparams.wrap_content, 380)); Msensormanager=(Sensormanager) Getsystemservice (Sensor_service); Msensor= Msensormanager.getdefaultsensor (Sensor.type_accelerometer);//type_gravity if(NULL==Msensormanager) {LOG.D (TAG,"Deveice not support Sensormanager"); } //parameter three, the accuracy of the detectionMsensormanager.registerlistener ( This, Msensor, sensormanager.sensor_delay_normal);//Sensor_delay_game } Private voidUpdatechart (floata) {//set length to intLength =Series1.getitemcount (); if(Length >= 20) Length= 20; AddY=A; ADDX=NewDate (). GetTime (); //put the previous points in the cache for(inti = 0; i < length; i++) {Xcache[i]=NewDate (Long) Series1.getx (i)); Ycache[i]= (float) series1.gety (i); } series1.clear (); Series1.add (NewDate (ADDX), AddY); for(intk = 0; K < length; k++) {Series1.add (xcache[k], ycache[k]); } //add a new set of points in the data setdataset1.removeseries (series1); Dataset1.addseries (SERIES1); //Curve Updatechart.invalidate (); } /*** Set as Table style * *@return */ Privatexymultipleseriesrenderer Getdemorenderer () {Xymultipleseriesrenderer renderer=NewXymultipleseriesrenderer (); Renderer.setcharttitle ("Real-time curve");//titleRenderer.setcharttitletextsize (20); Renderer.setxtitle ("Time");//X-Axis descriptionRenderer.setaxistitletextsize (16); Renderer.setaxescolor (Color.Black); Renderer.setlabelstextsize (15);//axis scale Font sizeRenderer.setlabelscolor (Color.Black); Renderer.setlegendtextsize (15);//Curve DescriptionRenderer.setxlabelscolor (Color.Black); Renderer.setylabelscolor (0, Color.Black); Renderer.setshowlegend (false); Renderer.setmargins (New int[] {20, 30, 100, 0 }); Xyseriesrenderer R=NewXyseriesrenderer (); R.setcolor (Color.Blue); R.setchartvaluestextsize (15); R.setchartvaluesspacing (3); R.setpointstyle (pointstyle.circle); R.setfillbelowline (true); R.setfillbelowlinecolor (Color.White); R.setfillpoints (true); Renderer.addseriesrenderer (R); Renderer.setmarginscolor (Color.White); Renderer.setpanenabled (false,false); Renderer.setshowgrid (true); Renderer.setyaxismax (50); Renderer.setyaxismin (-30); Renderer.setinscroll (true);//Adjust Size returnrenderer; } /*** Data Object * *@return */ PrivateXymultipleseriesdataset Getdatedemodataset () {DataSet1=NewXymultipleseriesdataset (); Final intNR = 10; LongValue =NewDate (). GetTime (); Random R=NewRandom (); for(inti = 0; i < SERIES_NR; i++) {series1=NewTimeSeries ("Demo series" + (i + 1)); for(intk = 0; K < nr; k++) {Series1.add (NewDate (value + k * 1000), 0); } dataset1.addseries (SERIES1); } log.i (TAG, dataset1.tostring ()); returnDataSet1; } @Override Public voidOnaccuracychanged (sensor sensor,intaccuracy) {} @Override Public voidonsensorchanged (Sensorevent event) {if(Event.sensor = =NULL) { return; } if(Event.sensor.getType () = =sensor.type_accelerometer) { floatx = event.values[0]; floaty = event.values[1]; floatz = event.values[2]; Mcalendar=calendar.getinstance (); LongStamp = Mcalendar.gettimeinmillis ();//1393844912Textviewx.settext (string.valueof (x)); Textviewy.settext (string.valueof (y)); Textviewz.settext (String.valueof (z)); intSecond = Mcalendar.get (Calendar.second);// - floatpx = Math.Abs (MX-x); floatPY = Math.Abs (MY-y); floatPZ = Math.Abs (MZ-z); LOG.D (TAG,"PX:" + px + "py:" + py + "PZ:" + PZ + "stamp:" + Stamp + "Second:" +second); floatMaxValue =getmaxvalue (px, py, PZ); if(MaxValue > 2 && (stamp-lasttimestamp) > 200) {Lasttimestamp=Stamp;Updatechart (x+y+z); Textviewf.settext ("Detect mobile phone in mobile ..."); }MX=x; MY=y; MZ=Z; } } /*** Get a maximum value * *@parampx *@paramPY *@paramPZ *@return */ Public floatGetmaxvalue (floatPxfloatPyfloatPZ) { floatMax = 0; if(px > py && px >PZ) {Max=px; } Else if(Py > px && py >PZ) {Max=py; } Else if(Pz > px && pz >py) {Max=PZ; } returnMax; }}
Android three axes to draw real-time acceleration curve