如何查找设备是在同一位置还是在Android中移动?

时间:2013-09-25 09:24:47

标签: android gps

在Android中,我使用闹钟管理器通过GPS获取每30秒的位置。我想使用geopoints检测设备是在旅行还是在同一位置。 如果设备在同一位置GPS获取一些准确数据,有时会在距离地图上显示的准确位置20或30米处获得近似数据。

所以找到设备旅行时遇到了问题。

如何找到设备没有旅行?

4 个答案:

答案 0 :(得分:7)

如果您有权访问Play Services,请查看Recognizing the User's Current Activity

否则,在a locationListener中,您可以执行以下操作: 由于收到的GPS信号即使处于相同位置也会有所不同,因此您不能仅将新位置与旧位置进行比较。我会使用类似下面的代码

            double venueLat =latitude // Last known lat
            double venueLng = longitude // Last known lng

            double latDistance = Math.toRadians(userLat - venueLat);
            double lngDistance = Math.toRadians(userLng - venueLng);
            double a = (Math.sin(latDistance / 2) * Math.sin(latDistance / 2)) +
                            (Math.cos(Math.toRadians(userLat))) *
                            (Math.cos(Math.toRadians(venueLat))) *
                            (Math.sin(lngDistance / 2)) *
                            (Math.sin(lngDistance / 2));

            double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));

            double dist = 6371 * c;             
            if (dist<0.01){ (in km, you can use 0.1 for metres etc.)
                /* If it's within 10m, we assume we're not moving */ 
            }

答案 1 :(得分:2)

您可以使用为播放服务提供的新活动识别功能,并检查用户是否“仍然”。阅读hereherehere了解详情,和/或查看this videothis one。我从未测试过它,但它看起来非常有前途。

或者,如果你坚持使用gps,你可以定义一个用户被认为停留在同一位置的范围,并检查用户没有超出这个范围的每个样本。

设置一个不太小而且不太大的范围很重要,因为总是存在错误边际。

答案 2 :(得分:1)

您可以在onLocationChanged()方法中编写代码。在设备改变位置时,每次都会获得新的纬度经度。仅当位置已更改时才调用OnLocationChange()方法。但是如果你想要一些特定的距离计算,那么你必须计算较旧的长期和新的长度之间的距离。您可以使用lat-long找到距离。

答案 3 :(得分:0)

获得新位置后,每30秒,您可以将其与之前的位置进行比较,以查看位置是否有任何差异,并确定设备是否正在旅行。