TYPE_LINEAR_ACCELERATION传感器值根据智能手机品牌 - 型号

时间:2016-09-26 14:23:47

标签: android accelerometer sensor android-sensors

我两天前在Google Play商店发布了一款使用运动传感器的游戏。这个游戏是一个拳击手游戏,并允许用户在他们摇动智能手机得分时将自动评估。要评估分数,它使用 TYPE_LINEAR_ACCELERATION 传感器。

但问题是在我发布游戏后,一些用户发送了他们的分数。我看到一些智能手机很容易获得900分,对于某些智能手机来说很难获得500分。我的意思是,如果同一个用户在这个游戏中摇动(用同样的力量)不同的手机;对于X智能手机,他得到(例如)400点,对于Y智能手机获得(例如)850点。

为什么会出现这种不平等?

我理解(猜测)一些智能手机评估得分较少,一些智能手机评估分数更多。

我的实施(大致)

    sensorManager = (SensorManager) getActivity().getSystemService(Context.SENSOR_SERVICE);
    sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_LINEAR_ACCELERATION), SensorManager.SENSOR_DELAY_FASTEST);

-

@Override
        public void onSensorChanged(SensorEvent event) {
            if (event.sensor.getType() == Sensor.TYPE_LINEAR_ACCELERATION) {
                float[] values = event.values;
                 float x = values[0];//to get X - axis acceleration   
                  //.......

                 //........
    }
    }

我可以分享我的应用程序链接,但是允许吗?如果是,请说。我可以分享我的申请链接。

注意:我想解释我的算法,得到分数我从传感器获得最大加速度并保持变量的最大值。用户点击show score按钮后,我乘以40得到分数。

3 个答案:

答案 0 :(得分:1)

我不明白你的问题。 Type_Linear_Acceleration是一个虚拟传感器,它从加速度计和陀螺仪的数据组合中获取数据。

大多数智能手机加速度计和陀螺仪没有完全相同的传感器,显然每台设备之间的数据会略有不同。

答案 1 :(得分:1)

你的天堂没有描述你如何计算分数。 我会对3维进行平方根计算,然后使用结果(磁性)作为分数

score = getMagnetude(values);

和功能:

private float getMagnetude(float[] v) {
        return Math.sqrt( v[0]*v[0] + v[1]*v[1] + v[2]*v[2] );
}

答案 2 :(得分:-1)

我理解我的问题。我正在使用 Sensor.TYPE_LINEAR_ACCELERATION ,因此它使用陀螺仪+加速计传感器。

TYPE_LINEAR_ACCELERATION传感器的操作逻辑是什么?

它使用加速度计和陀螺仪传感器。它有一个公式:

线性加速度= k1 x加速度计+ k2 xgyroscope

k1和k2是常数值。

对于陀螺仪,没有任何最大值(我认为),但对于加速计传感器,不同的智能手机使用不同的最大值。

这些最大值为 - + g(9.8), - + 2g, - + 4g和 - + 8g。

最后,对于不同的智能手机,会显示不同的结果,因为用户通常在摇动智能手机时达到最大值。