我使用下面的代码来识别设备的移动,这意味着我想知道设备是否正在移动。我还使用Google Activity API,它提供不同的活动模式,如WALKING,ON_FOOT,STILL等,而不使用GPS。我想用传感器实现同样的目标,但我无法准确地得到它。
以下代码的问题在于,只要我快速移动设备,就像从表中取出一样,我会将结果视为移动,而实际上并没有移动。
// calling method from onSensorChanged method and using TYPE_ACCELEROMETER sensor.
double speed = getAccelerometer(event.values);
// then checking the speed.
if(speed > 0.9 && speed < 1.1) {
// device is not moving
} else {
// device is moving.
}
/**
* @return
*/
private double getAccelerometer(float[] values) {
// Movement
float x = values[0];
float y = values[1];
float z = values[2];
float accelerationSquareRoot =
(float) ((x * x + y * y + z * z) / (9.80665 * 9.80665));
return Math.sqrt(accelerationSquareRoot);
}
任何人都可以指导我如何使这个逻辑准确,以便我可以识别设备是否正在移动?
答案 0 :(得分:0)
加速度计用于返回加速度数据,根据Netwon的第二定律,如果加速度恒定,则车身不会以恒定速度移动或移动(这在您的情况下是非常不可能的)。 因此,如果您继续从加速度计读取所有三个轴上的相同数据(或者在相当严格的范围内更好),则意味着手机不会移动,否则就是。
答案 1 :(得分:0)
出于此目的,您需要使用活动识别API,它将为您提供一些事件,如移动,停止,驾驶,e.t.c,活动识别使用一些传感器数据,并在运行时帮助定位服务。我们可以更多地使用它们以及它实际上是什么。您可以从下面的链接中阅读
https://developers.google.com/location-context/activity-recognition/