【发布时间】:2011-07-27 15:13:18
【问题描述】:
想象一下你正指着电视。你手里拿着手机。现在,转动你的手腕。
我需要使用哪个传感器来检测这种运动?
陀螺仪? 方向? 加速度计?
【问题讨论】:
想象一下你正指着电视。你手里拿着手机。现在,转动你的手腕。
我需要使用哪个传感器来检测这种运动?
陀螺仪? 方向? 加速度计?
【问题讨论】:
传感器 TYPE_MAGNETIC_FIELD 和 TYPE_ACCELEROMETER 可以很好地检测到这一点(因为 TYPE_ORIENTATION 现在已弃用)。
你需要:
几个矩阵:
private float[] mValuesMagnet = new float[3];
private float[] mValuesAccel = new float[3];
private float[] mValuesOrientation = new float[3];
private float[] mRotationMatrix = new float[9];
一个侦听器,用于捕获传感器发送的值(这将是SensorManager.registerListener() 的一个参数,您必须调用它来设置您的传感器):
private final SensorEventListener mEventListener = new SensorEventListener() {
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
public void onSensorChanged(SensorEvent event) {
// Handle the events for which we registered
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;
}
};
您需要计算方位角、俯仰角和滚动角:
SensorManager.getRotationMatrix(mRotationMatrix, null, mValuesAccel, mValuesMagnet);
SensorManager.getOrientation(mRotationMatrix, mValuesOrientation);
mValuesOrientation 然后填充为:
mValuesOrientation[0]:方位角,绕Z轴旋转。 mValuesOrientation[1]:俯仰,绕X轴旋转。 mValuesOrientation[2]:滚动,绕 Y 轴旋转。 查看documentation of getOrientation() 以了解轴是如何定义的。您可能需要使用SensorManager.remapCoordinateSystem() 重新定义这些轴。
【讨论】:
这取决于您要检测的内容,如果您想检测手机是否旋转移动,那么加速度计可能是您最好的选择。 如果您想检测手机现在是否已旋转,请使用 Orientation。
【讨论】:
gyroscope 用于检测旋转,如果您不关心您相对于地球的位置。
【讨论】: