车载的侧翻算法根据上面的公式实现,而碰撞时根据三个方向的加速度的值。主要利用了传感器的onSensorChanged来实现。packagecom.leadcore.edr.packet;importjava.util.*;importandroid.content.Context;importandroid.hardware.Sensor;importandroid.hardware.SensorEvent;importandroid.hardware.SensorEventListener;importandroid.hardware.SensorManager;importjava.lang.Math;importandroid.util.Log;publicclassGSensorService{privatestaticfinalStringTAG="GSensorService";privateContextmContext=null;privatebooleanmIsRolloverWarning=false;privatebooleanmIsCrashWarning=false;publicGSensorService(Contextcontext){mContext=context;}privatefinalSensorEventListenermSensorListener=newSensorEventListener(){@OverridepublicvoidonSensorChanged(SensorEventevent){if(Sensor.TYPE_ACCELEROMETER==event.sensor.getType()){floatxAxis=event.values[0];floatyAxis=event.values[1];floatzAxis=event.values[2];floatmax_accelerometer=GlobalData.getCrashacceleration()*SensorManager.STANDARD_GRAVITY/10;booleanisOverAccelerometer=Math.abs(xAxis)>max_accelerometer||Math.abs(yAxis)>max_accelerometer||Math.abs(zAxis)>max_accelerometer;if(isOverAccelerometer&&!mIsCrashWarning){mIsCrashWarning=true;GlobalData.setWarningFlag(JTT808.MSG_WARN_CRASH_WARN);Log.i(TAG,"crashwarning.");}elseif(!isOverAccelerometer&&mIsCrashWarning){mIsCrashWarning=false;GlobalData.ClearWarningFlag(JTT808.MSG_WARN_CRASH_WARN);}doublerad2=Math.atan(xAxis/Math.sqrt(yAxis*yAxis+zAxis*zAxis));doubledegree2=Math.toDegrees(rad2);intmax_degree=GlobalData.getCrashDegree();if(Math.abs(degree2)>=max_degree&&!mIsRolloverWarning){mIsRolloverWarning=true;GlobalData.setWarningFlag(JTT808.MSG_WARN_ROLLOVER);Log.i(TAG,"Rolloverwarning.");}elseif(Math.abs(degree2)