我有一个小项目,需要检测设备的运动 例如: 我把手机放在桌子上 如果我移动设备“就像移动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));
}
}
感谢
答案 0 :(得分:1)
来自Android文档:
测量在所有三个物理轴(x,y和z)上应用于设备的加速力m / s2,包括重力。
ieaccelerometer检测加速度,而不是运动,而不是速度而不是方向。简而言之:如果您的移动速度恒定,则加速度计将显示0.您需要编写一个算法来解析加速度的速度和/或方向。它涉及大量关于物理和数学的研究。简而言之:加速度的积分是速度,加速度的第二积分是方向。 (当然它要复杂得多,但只是为了指导你从哪里开始探索)。