>我有一个实现SensorEventListener
的类,我想得到使用Accelerometer
的设备tilt Angle
。
我在互联网上寻找示例,但他们使用 Sensor.TYPE_MAGNETIC_FIELD
.
我相信我的设备没有这个传感器,因为当我做以下检查
manager.getSensorList(Sensor.TYPE_ACCELEROMETER).size()
,我得到零。
有没有tilt Angle
办法通过使用 Sensor.TYPE_ACCELEROMETER
价值观?
正如人们建议的那样,您可以使用加速度计和磁传感器来执行此操作。
这是一篇包含完整解决方案的博客文章。
http://www.ahotbrew.com/how-to-detect-forward-and-backward-tilt/
试试这个,
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];
您可以使用加速度计获取倾斜读数。如果您设置加速度计,您会注意到它包括重力。因此,如果您的手机正面朝上放在桌子上,则 z 轴将记录在接近 9.81(重力(的位置,x 轴和 y 轴将为 0。当您倾斜手机时,重力将投射到 x 和/或 y 轴上。因此,x和y值将告诉您手机的倾斜度。