Android:加速度计传感器中z值的范围在不同的设备上是不同的

标签 android accelerometer sensors

我想检测设备是否正面朝上。 (不是倾斜的,而是平放在地面上的)。
在某些面向上的设备上,z 值将返回 9~10 之间的值。 (大多数设备)
然而,在 Nexus 7 上,对于面朝上,z 值将返回 6~8 之间的值。

我的代码是:

if(z_value > 9.0) {
    // device facing up
}
else {
    // device is in angled
}

但是,上面的代码不再起作用了。因为 Nexus7 没有达到 9 的 z_value。

如何检测设备是否(完全)朝上。 (不要求 z_value > 0)

我的完整代码如下:

@Override
protected void onStart() {
    super.onStart();
    try {
        sensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
        List<Sensor> sensorList = sensorManager.getSensorList(Sensor.TYPE_ACCELEROMETER);
        if(sensorList.size() > 0){
            accelerometerPresent = true;
            accelerometerSensor = sensorList.get(0);  
        }
        else{
            accelerometerPresent = false;  
        }
        if(accelerometerPresent){
            sensorManager.registerListener(accelerometerListener, accelerometerSensor, SensorManager.SENSOR_DELAY_UI);
        }
    } catch(Exception e) {}
}

private SensorEventListener accelerometerListener = new SensorEventListener(){

            @Override
            public void onAccuracyChanged(Sensor arg0, int arg1) {}

            @Override
            public void onSensorChanged(SensorEvent arg0) {
                float z_value = arg0.values[2];
                Log.d("test", "z:" + z_value);
            }};

注释#1
arg0.sensor.getMaximumRange() 为 Nexus 7 返回 19.6133。哪个传感器永远不会返回。

注释#2
如果摇晃设备,z_value 会略微升高(有时为 8~8.5)。 如果您稳定地倾斜设备,z_value 不会达到 8(最大值)。

最佳答案

显然设备校准不当。校准良好的设备应返回 9.81m/s^2,即重力加速度。

您可以改为:将 z 值与 x 和 y 值进行比较。如果 z 值占主导地位,则设备正面朝上。例如:

if (z/sqrt(x^2+y^2+z^2+1.0e-6) > 0.9) { // Facing up

我添加了术语 1.0e-6 这样您就不会不小心被零除。

这种启发式方法需要测试和调整,但我想您已经明白了。祝你好运!

关于Android:加速度计传感器中z值的范围在不同的设备上是不同的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13018119/

相关文章:

android - getOrientation() 俯仰反射(reflect)地平线

android - 如何将使用 SensorListener 的程序转换为 SensorEventListener

c++ - 我如何使用树莓派获取ina219传感器数据

android - Ubuntu 没有检测到我的安卓设备

java - 平滑或逐渐删除 ListView 中的一行

android - 如何在 Tabbed Activity Android 的操作栏中为每个选项卡添加图标

windows-phone-7 - Windows Phone 7 上的 GPS 速度有多可靠

android - 房间获取 ConcurrentModificationException

iOS 设备和 2D 空间

android - 在惯性导航系统中确定航向