2012-08-22 126 views
8

我有一个类实现了SensorEventListener,我想要 tilt Angle我的设备使用Accelerometer从android加速度计获取倾斜角

我在网上寻找例子,但他们使用 Sensor.TYPE_MAGNETIC_FIELD

我相信,因为当我做 以下检查
manager.getSensorList(Sensor.TYPE_ACCELEROMETER).size()我的设备不具有这种传感器,我得到

有没有办法通过仅使用 Sensor.TYPE_ACCELEROMETER值来获得tilt Angle

回答

0

试试这个,

SensorManager sensorManager = (SensorManager) this.getSystemService(SENSOR_SERVICE);   

     final SensorEventListener mEventListener = new SensorEventListener() { 
      public void onAccuracyChanged(Sensor sensor, int accuracy) { 
      } 


      public void onSensorChanged(SensorEvent event) { 
       // TODO Auto-generated method stub 
       switch (event.sensor.getType()) { 
       case Sensor.TYPE_ACCELEROMETER: 
        System.arraycopy(event.values, 0, mValuesAccel, 0, 3); 
        break; 

       case Sensor.TYPE_MAGNETIC_FIELD: 
        System.arraycopy(event.values, 0, mValuesMagnet, 0, 3); 
        break; 
       } 
      }; 
     }; 

     setListners(sensorManager, mEventListener); 

SensorManager.getRotationMatrix(mRotationMatrix, null, mValuesAccel, mValuesMagnet); 
       SensorManager.getOrientation(mRotationMatrix, mValuesOrientation); 
       final CharSequence test; 
       test = ","+mValuesOrientation[0] +","+mValuesOrientation[1]+ ","+ mValuesOrientation[2]; 
+0

正如我说我的设备不具有Sensor.TYPE_MAGNETIC_FIELD。 有没有办法通过使用Sensor.TYPE_ACCELEROMETER值来获得倾斜角度? – user1615888

+0

然后只使用Sensor.TYPE-Accelerometer案例 – AndroidCrazy

+1

但是然后mValuesMagnet将是空的,它不能。 – user1615888

0

您可以使用加速计来获得倾斜读数。如果你设置了一个加速度计,你会发现它包含了重力。因此,如果您的手机在桌面上正面朝上,则z轴将在接近9.81(重力)的位置注册,x轴和y轴将位于0.当您倾斜手机时,重力将被投影到x和/或y轴上。因此,您的x和y值会告诉您手机的倾斜。