4

在 Android 中,我使用警报管理器通过 GPS 每 30 秒获取一次位置。我想使用地理点检测设备是否正在旅行或存在于同一位置。如果设备在同一位置 GPS 有时会在距离地图上显示的准确位置 20 或 30 米的时间获得近似数据。

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

如何找到设备不在旅行?

4

4 回答 4

9

如果您有权访问Play 服务,请查看识别用户的当前活动

否则,在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 */ 
            }
于 2013-09-25T09:29:31.333 回答
2

您可以使用为 play-services 提供的新活动识别功能,并检查用户是否“静止”。阅读此处此处此处了解更多信息,和/或查看此视频视频。我从未测试过它,但它看起来很有希望。

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

设置一个不太小也不太大的范围很重要,因为总是存在误差范围。

于 2013-09-25T09:31:41.700 回答
1

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

于 2013-09-25T09:28:08.810 回答
0

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

于 2013-09-25T09:27:30.373 回答