如何检测设备是否移动使用传感器android

时间:2018-01-25 06:45:49

标签: android accelerometer android-sensors

我使用下面的代码来识别设备的移动,这意味着我想知道设备是否正在移动。我还使用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);
    }

任何人都可以指导我如何使这个逻辑准确,以便我可以识别设备是否正在移动?

2 个答案:

答案 0 :(得分:0)

加速度计用于返回加速度数据,根据Netwon的第二定律,如果加速度恒定,则车身不会以恒定速度移动或移动(这在您的情况下是非常不可能的)。 因此,如果您继续从加速度计读取所有三个轴上的相同数据(或者在相当严格的范围内更好),则意味着手机不会移动,否则就是。

答案 1 :(得分:0)

出于此目的,您需要使用活动识别API,它将为您提供一些事件,如移动,停止,驾驶,e.t.c,活动识别使用一些传感器数据,并在运行时帮助定位服务。我们可以更多地使用它们以及它实际上是什么。您可以从下面的链接中阅读

https://developers.google.com/location-context/activity-recognition/