Представьте, что вы указываете на телевизор. Вы держите телефон в руке. Теперь вращайте запястье.
Каким датчиком мне нужно управлять, чтобы обнаруживать такое движение?
Гироскоп? Ориентация? Акселерометр?
Представьте, что вы указываете на телевизор. Вы держите телефон в руке. Теперь вращайте запястье.
Каким датчиком мне нужно управлять, чтобы обнаруживать такое движение?
Гироскоп? Ориентация? Акселерометр?
Датчики 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.Проверьте документацию getOrientation(), чтобы узнать, как определяются оси. Возможно, вам придется использовать SensorManager.remapCoordinateSystem()
для переопределения этих осей.
Это зависит от того, что вы хотите обнаружить, если вы хотите обнаружить, что телефон был перемещен во вращении, тогда акселерометр, вероятно, будет вашим лучшим выбором. Если вы хотите определить, что телефон теперь повернут, выберите Ориентация.
гироскоп предназначен для обнаружения поворотов, если вы не Меня не волнует ваше положение относительно Земли.