【问题标题】:Same values when combining multiple sensors in Android在 Android 中组合多个传感器时的值相同
【发布时间】:2021-03-03 13:32:06
【问题描述】:

我想同步加速度计和陀螺仪传感器。我为它制作了一个 Android 应用程序,并将传感器的值插入到数据库中。我试过这段代码 sn-p 但它给出了相同值的重复。

 @Override
    protected void onCreate(Bundle savedInstanceState) {

         private boolean isGyroscopeSensorPresent = false;
         private boolean isAccelerometerSensorPresent = false;

        //sensor gyroscope
        if(sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE) != null) {
            gyroscope = sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE);
            isGyroscopeSensorPresent = true;
        } else {
            isGyroscopeSensorPresent = false;
        }

        //sensor accelerometer
        if(sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER) != null) {
            accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
            isAccelerometerSensorPresent = true;
        } else {
            isAccelerometerSensorPresent = false;
        }
    }

    @Override
    public void onSensorChanged(SensorEvent event) {

        Sensor sensor = event.sensor;

        if (sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
            x_axis = event.values[0];
            y_axis = event.values[1];
            z_axis = event.values[2];
        } if (sensor.getType() == Sensor.TYPE_GYROSCOPE) {
            gyro_x_axis = event.values[0];
            gyro_y_axis = event.values[1];
            gyro_z_axis = event.values[2];
        }
        if (isAccelerometerSensorPresent && isGyroscopeSensorPresent){
             mDBHelper.insert(x_axis, y_axis, z_axis, gyro_x_axis, gyro_y_axis, gyro_z_axis, time_gyro, subject, alphabet);
        }
    }

database output

如何解决这个重复值问题?我只想创建一个用橙色写的值的数据库,如图所示(如果你注意用橙色写的值不重复)。如果您能提供帮助,我会很高兴。

谢谢。

【问题讨论】:

    标签: android synchronization accelerometer android-sensors gyroscope


    【解决方案1】:

    即使值没有变化(例如桌面上的设备未被触摸),传感器也可能会在一段时间内报告,因此请在您身边检查

    @Override
    public void onSensorChanged(SensorEvent event) {
        Sensor sensor = event.sensor;
    
        float x_axis = this.x_axis, y_axis = this.y_axis, z_axis = this.z_axis;
        if (sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
            x_axis = event.values[0];
            y_axis = event.values[1];
            z_axis = event.values[2];
        }
    
        float gyro_x_axis = this.gyro_x_axis, gyro_y_axis = this.gyro_y_axis,
            gyro_z_axis = this.gyro_z_axis;
        if (sensor.getType() == Sensor.TYPE_GYROSCOPE) {
            gyro_x_axis = event.values[0];
            gyro_y_axis = event.values[1];
            gyro_z_axis = event.values[2];
        }
    
        boolean exaclySame = this.x_axis == x_axis &&
                this.y_axis == y_axis &&
                this.z_axis == z_axis &&
                this.gyro_x_axis == gyro_x_axis &&
                this.gyro_y_axis == gyro_y_axis &&
                this.gyro_y_axis == gyro_z_axis;
    
        if (isAccelerometerSensorPresent && isGyroscopeSensorPresent && !exaclySame){
             this.x_axis = x_axis;
             this.y_axis = y_axis;
             this.z_axis = z_axis;
             this.gyro_x_axis = gyro_x_axis;
             this.gyro_y_axis = gyro_y_axis;
             this.gyro_z_axis = gyro_z_axis;
    
             mDBHelper.insert(x_axis, y_axis, z_axis, gyro_x_axis, gyro_y_axis, gyro_z_axis, time_gyro, subject, alphabet);
        }
    }
    

    在例如this.x_axis == x_axis line this.x_axis 指在类中声明的变量,x_axis 指本地变量(在方法中声明)

    【讨论】:

    • 感谢您的努力。我尝试了代码,它给出了一个错误 exaclySame 部分。它说永远不会分配变量'exactlySame'。我将 exaclySame 变量分配给 false 并再次尝试。现在它给出 Operator '==' cannot be applied to 'boolean', 'float' 错误
    • 好吧,是的,我犯了一个小错误,而不是 boolean exaclySame == 应该是 boolean exaclySame = (答案已编辑)。我只是以为您知道如何为变量赋值...
    • 再次感谢我也没有注意到。不幸的是,什么都没有改变,仍然有相同的重复值。
    • 遗憾的是,我现在在逻辑上看不到任何问题,我的改进肯定可以防止多次插入。 boolean exaclySame 正在解决/回答一切......也许mDBHelper.insert 方法格式不正确?在最后一个 if 之前放一些 Log.i() 并记录所有传感器值,您会看到每次至少有一个值发生变化
    • 抱歉回复晚了。我试过Log.i(),它给出了重复的值。这意味着我写的代码表示错误,而不是你写的代码?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多