java - 如何在android中校准方向传感器

标签 java android sensors

我正在尝试从手机陀螺仪获取数据。 到目前为止,角度不断变化取决于我移动手机的角度。

但是,例如方位角,我希望它从我开始的位置开始计数,而不是从北方向开始计数 --> 我希望它从 0 开始。

我的问题是:如何保存从陀螺仪获得的第一个数据,以便在移动手机时可以从其余数据中“减去”? 代码如下所示:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    sm=(SensorManager)getSystemService(Context.SENSOR_SERVICE);
    rotationvector=sm.getDefaultSensor(Sensor.TYPE_ORIENTATION);
    sm.registerListener(this,rotationvector,SensorManager.SENSOR_DELAY_NORMAL);

    rotationx=(TextView)findViewById(R.id.rotationx);
    rotationy=(TextView)findViewById(R.id.rotationy);
    rotationz=(TextView)findViewById(R.id.rotationz);


}
@Override
public void onSensorChanged(SensorEvent event) {


    rotationx.setText(" " +event.values[0]);
    rotationy.setText(" " +event.values[1]);
    rotationz.setText(" " +event.values[2]);

}

我想做的事情是这样的:

    rotationx.setText(" " +event.values[0]-FirstAzimuthValue);

谢谢!

新代码:

private boolean isFirstMeasure = true;
private float FirstAzimuthValue = 0;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    sm=(SensorManager)getSystemService(Context.SENSOR_SERVICE);
    rotationvector=sm.getDefaultSensor(Sensor.TYPE_ORIENTATION);
    sm.registerListener(this,rotationvector,SensorManager.SENSOR_DELAY_NORMAL);

    rotationx=(TextView)findViewById(R.id.rotationx);
    rotationy=(TextView)findViewById(R.id.rotationy);
    rotationz=(TextView)findViewById(R.id.rotationz);

}
@Override
public void onSensorChanged(SensorEvent event) {

    if (isFirstMeasure){
        FirstAzimuthValue - event.values[0]; //error this line
        isFirstMeasure = false;
    }

    rotationx.setText(" " +(event.values[0] - FirstAzimuthValue));
    rotationy.setText(" " +event.values[1]);
    rotationz.setText(" " +event.values[2]);

}

最佳答案

为什么不只是

private boolean isFirstMeasure = true;
private float firstAzimuthValue = 0;

// ...

@Override
public void onSensorChanged(SensorEvent event) {
    if (isFirstMeasure) {
        firstAzimuthValue = event.values[0];
        isFirstMeasure = false;
    }

    rotationx.setText(" " + (event.values[0] - firstAzimuthValue));
    rotationy.setText(" " +event.values[1]);
    rotationz.setText(" " +event.values[2]);
}

关于java - 如何在android中校准方向传感器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37898218/

相关文章:

java - 子线程在Java中是否继承了父线程的ThreadScope?

java - 使用 facebooklogin 插件的网站并将用户凭据存储到数据库 JAVA 或 Javascript 到我表单的文本框中

java - liferay生成的数据库名称是什么?

java - Android Volley 空指针异常

ios - 在没有私有(private) API 的情况下在 iOS 中获取光传感器值?

java - 对于 OpenHab Zwave Bundle,MultiLevelSensor 显示读数的底层代码在哪里?

java - 如何使用 @ResponseBody 从 Spring Controller 返回 JSON 数据

android - 在清理项目时,R.java 从所有项目中消失

java - 3 个 TextView 旁边的 Android 布局按钮

Android - 如何处理跌倒检测算法