java - 如何在android中使用传感器加速度计检测运动

标签 java android accelerometer

这是我在 Activity 中的代码,但是 mAccel 的值总是 0。我想将 mAccel 的值与灵敏度值进行比较。 有人可以帮我解决这个问题吗?

   private float mAccel;
    private float mAccelCurrent;
    private float mAccelLast;
    private float[] mGravity;
    float sensitivityLevel = 2.0f;

 private SensorManager sensorManager;
 private Sensor accel;

  sensorManager=(SensorManager)getSystemService(SENSOR_SERVICE);
        accel = sensorManager.getDefaultSensor(1);

        mAccel = 0.00f;
        mAccelCurrent = SensorManager.GRAVITY_EARTH;
        mAccelLast = SensorManager.GRAVITY_EARTH;
@Override
public void onSensorChanged(SensorEvent event) {
     if (event.sensor.getType() ==1){
            mGravity = event.values.clone();
            // Shake detection
            float x = mGravity[0];
            float y = mGravity[1];
            float z = mGravity[2];
            mAccelLast = mAccelCurrent;
            mAccelCurrent =  FloatMath.sqrt(x*x + y*y + z*z);
            float delta = mAccelCurrent - mAccelLast;
            mAccel = mAccel * 0.9f + delta;

       if(mAccel > sensitivityLevel){
           play_alarm("car alarm");
       }
    }

最佳答案

需要注册监听器

    sm = (SensorManager) getSystemService(SENSOR_SERVICE);
    if(sm.getSensorList(Sensor.TYPE_ACCELEROMETER).size()!=0){
      Sensor s = sm.getSensorList(Sensor.TYPE_ACCELEROMETER).get(0);
      sm.registerListener(this,s, SensorManager.SENSOR_DELAY_NORMAL);
    }

您应该使用日志或调试来检查该方法是否被调用。

关于java - 如何在android中使用传感器加速度计检测运动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37867683/

相关文章:

泛型类的 Java 工厂

java - onPostExecute 似乎没有被调用

iphone - 如何为此代码实现计时器?

java - Maven 无法构建 pom

java - 使用 Collections 获取 HashMap 中最大值的键

java - 如果子字符串不在我的原始字符串中,如何避免 StringIndexOutOfBoundsException?

java - 蓝牙仅发送一次传感器数据

java - 文件名中的空格阻止下载

Android:长按操作按钮

iphone - iPhone 加速度计是否已校准?重力测量根据方向而变化