前进,后退左右sesnor android

时间:2016-01-28 09:18:53

标签: android sensor

我有一个小项目,需要检测设备的运动 例如: 我把手机放在桌子上 如果我移动设备“就像移动PC鼠标”,我需要知道 如果我向右移动,我需要知道 如果我向前移动,向后移动我需要知道

我搜索并使用了很多教程,但所有教程都给了我数字,即使设备没有移动也会发生很大变化! 我试过这个

 if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER){
            mGravity = event.values.clone();
            // Shake detection
            float x = mGravity[0];
            float y = mGravity[1];
            float z = mGravity[2];
            mAccelLast = mAccelCurrent;
            mAccelCurrent = (float)Math.sqrt(x * x + y * y + z * z);
            float delta = mAccelCurrent - mAccelLast;
            mAccel = mAccel * 0.9f + delta;
            // Make this higher or lower according to how much
            // motion you want to detect
            if(mAccel > 0.0005){
                ((TextView)findViewById(R.id.XField)).setText("X:" + String.valueOf((x)));
                ((TextView)findViewById(R.id.YField)).setText("Y:" + String.valueOf((y)));
                ((TextView)findViewById(R.id.ZField)).setText("Z:" + String.valueOf(z));
            }
        }

感谢

1 个答案:

答案 0 :(得分:1)

来自Android文档:

  

测量在所有三个物理轴(x,y和z)上应用于设备的加速力m / s2,包括重力。

ieaccelerometer检测加速度,而不是运动,而不是速度而不是方向。简而言之:如果您的移动速度恒定,则加速度计将显示0.您需要编写一个算法来解析加速度的速度和/或方向。它涉及大量关于物理和数学的研究。简而言之:加速度的积分是速度,加速度的第二积分是方向。 (当然它要复杂得多,但只是为了指导你从哪里开始探索)。