我在下面的accel
,x
,y
和z
获得的值与预期不符。
它似乎是作为倾斜传感器而不是加速度计。
当我将手机放到空中并抓住它时,accel
值的变化不会超过10%左右。相比之下,当我随机旋转手机时,我会得到50-100%的更大变化!
有什么可以解释这个?我只想检测手机何时处于自由落体状态(和/或影响某些东西)。
SensorManager sm = (SensorManager)getSystemService(SENSOR_SERVICE);
Sensor sensor = sm.getDefaultSensor(SensorManager.SENSOR_ACCELEROMETER);
sm.registerListener(
sel = new SensorEventListener(){
@Override public void onAccuracyChanged(Sensor arg0, int arg1) {}
@Override public void onSensorChanged(SensorEvent arg0) {
double x = se.values[0];
double y = se.values[1];
double z = se.values[2];
double accel = Math.sqrt(
Math.pow(x, 2) +
Math.pow(y, 2) +
Math.pow(z, 2));
}
},
sensor,
SensorManager.SENSOR_DELAY_NORMAL
);
(作为一个侧面问题,x,y和z的值似乎远高于它们应该是的值,accel
平均值在50-80左右,当静止不动时?不应该是9.8左右? )
x,y和z值似乎对手机方向的变化非常敏感,但完全不代表加速度。我错过了什么吗?
手机静止的示例值,躺在后面: Accel = 85.36,x = 6.8,y = 45.25 z = 30.125
答案 0 :(得分:2)
我不得不替换
Sensor sensor = sm.getDefaultSensor(SensorManager.SENSOR_ACCELEROMETER);
与
Sensor sensor = sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
答案 1 :(得分:0)
可能是因为当您扔掉手机时,它几乎是相同的平面或角度,并且在低速时,当您转动手机时,它会快速改变其路线和方向,从而为结果提供更高的值。加速度计可能是多功能设备的误称,可能有一个选择参数用于您真正想要获得结果的功能。
答案 2 :(得分:0)
手机背面放置时,X和Y传感器应接近零,Z传感器接近9.8。 9.8当然是由于引力。
我的第一个问题是电话有问题,建议在另一部手机上尝试相同的代码。
然而,我注意到数学中存在一些问题,但是还没有找到答案。
x,y,z的值与你提到的结果(平方和的平方根)相差54.78而不是你在帖子中提到的85.36。
我对Java很陌生,因此我无法轻易发现可能出现的问题,并且还没有机会在我的手机上尝试这段代码,但我认为数学很简单,我可以确定结果是错的。 (或者至少我希望如此)。
要检查的另一件事(假设你弄清楚数学问题)是当你把手机扔到空中时的微小变化可能只是由于响应时间慢。加速度计输出可能只是变化太慢,所以到手机着陆时输出不会发生太大变化。使用SENSOR_DELAY_GAME或SENSOR_DELAY_FASTEST而不是正常情况可以改善响应。
顺便说一下,不应该是arg0.values []而不是se.values []? se来自哪里?传感器值进入onSensorChanged的参数(在本例中为arg0),因此我无法弄清楚它们应该如何结束。 (但是Java中有许多东西我仍然不明白)