如何检测手机的一个整圈(360度)?(How to detect one full turn (36

2019-10-18 08:06发布

因为我没有找到任何相关的答案在网上搜索,我张贴关于检测的360度的问题, 原来使用加速度计围绕其轴的Android设备。 例如大约在横向模式y轴:让我们说,在开始位置y值为0(设备是平坦的接地)。 当电话正向旋转90度y = -10 ,180度向前倾斜将导致y = 0 ,270度的倾斜在y = +10幅360度在y = 0 。 因此,如何将代码看起来象只检测在预先设定的方向的装置的这一整圈?

@Override
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
    // assign directions
    x = event.values[1];
    y = event.values[0];
    z = event.values[2];

        ???
    }
}

编辑:已使用getRotationMatrix()方法succeded。

private float[] r = new float[9];
private float[] i = new float[9];
private float[] v = new float[3];

private float[] accValues = new float[3];
private float[] geoValues = new float[3];

private int azimuth, pitch, roll;

@Override
public void onSensorChanged(SensorEvent event) {

    if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
        accValues = event.values.clone();
    }

    if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) {
        geoValues = event.values.clone();
    }

    boolean success = SensorManager.getRotationMatrix(r, i, accValues,
        geoValues);

    if (success) {
        SensorManager.getOrientation(r, v);

        azimuth = v[0] * (180 / Math.PI);
        pitch = v[1] * (180 / Math.PI);
        roll = v[2] * (180 / Math.PI);
    }
}

Answer 1:

你可以尝试这样的:

`
@覆盖

public void onSensorChanged(SensorEvent event) {

if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {

x = event.values[1];
y = event.values[0];
z = event.values[2];

if (event.sensor.getType() == Sensor.TYPE_ORIENTATION) {
x1 = event.values[1];
y1 = event.values[0];
z1 = event.values[2];

}

}`

此代码应允许您检测加速度和方向的变化,因此,即使因为有方向的变化,然后有一个完整的旋转(但加速度计的Y值从0到0再次,你仍然需要清理这个代码,以消除其中的电话转到180°的方向上的情况下,然后返回180°(转动手机上下再次))

出于好奇,为什么你会需要一个360°转弯的手机? 我试图把我的手机360°,它不是容易的事情。



文章来源: How to detect one full turn (360 degrees) of the phone?