车载的侧翻算法根据上面的公式实现,而碰撞时根据三个方向的加速度的值。主要利用了传感器的**ensorChanged来实现。
[java] view plain copy
- package com.leadcore.edr.packet;
-
- import java.util.*;
-
- import android.content.Context;
- import android.hardware.Sensor;
- import android.hardware.SensorEvent;
- import android.hardware.SensorEventListener;
- import android.hardware.SensorManager;
- import java.lang.Math;
- import android.util.Log;
-
- public class GSensorService {
- private static final String TAG = "GSensorService";
- private Context mContext = null;
- private boolean mIsRolloverWarning = false;
- private boolean mIsCrashWarning = false;
-
- public GSensorService(Context context) {
- mContext = context;
- }
-
- private final SensorEventListener mSensorListener = new SensorEventListener() {
- @Override
- public void **ensorChanged(SensorEvent event) {
- if (Sensor.TYPE_ACCELEROMETER == event.sensor.getType()) {
- float xAxis = event.values[0];
- float yAxis = event.values[1];
- float zAxis = event.values[2];
- float max_accelerometer = GlobalData.getCrashacceleration()
- * SensorManager.STANDARD_GRAVITY / 10;
- boolean isOverAccelerometer = 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, "crash warning.");
- } else if (!isOverAccelerometer && mIsCrashWarning) {
- mIsCrashWarning = false;
- GlobalData.ClearWarningFlag(JTT808.MSG_WARN_CRASH_WARN);
- }
-
- double rad2 = Math.atan(xAxis / Math.sqrt(yAxis * yAxis + zAxis * zAxis));
- double degree2 = Math.toDegrees(rad2);
-
- int max_degree = GlobalData.getCrashDegree();
- if (Math.abs(degree2) >= max_degree && !mIsRolloverWarning) {
- mIsRolloverWarning = true;
- GlobalData.setWarningFlag(JTT808.MSG_WARN_ROLLOVER);
- Log.i(TAG, "Roll over warning.");
- } else if (Math.abs(degree2) < max_degree && mIsRolloverWarning) {
- GlobalData.ClearWarningFlag(JTT808.MSG_WARN_ROLLOVER);
- mIsRolloverWarning = false;
- }
- }
- }
-
- @Override
- public void onAccuracyChanged(Sensor sensor, int accuracy) {
- // Not used.
- }
- };
-
- private void registerListener() {
- SensorManager sm = (SensorManager)mContext.getSystemService(Context.SENSOR_SERVICE);
- sm.registerListener(mSensorListener, sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
- SensorManager.SENSOR_DELAY_NORMAL);
- }
-
- public void start() {
- registerListener();
- }
- }
|