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

如何在Android中查找设备是否在同一位置或移动?,android,gps,Android,Gps,在安卓系统中,我每30秒通过GPS使用alarm manager获取一次位置信息。我想使用地质点检测设备是否在同一位置移动或存在。 如果设备位于同一位置,GPS在距离地图上显示的准确位置20米或30米的时间获得一些精确数据 所以在寻找移动设备时遇到了问题 如何查找设备未移动?每30秒,当您获得新位置时,您可以将其与以前的位置进行比较,以查看位置是否有任何差异,并确定设备是否正在移动。您可以使用onLocationChanged()方法编写代码。在那个里,每次当设备改变位置时,你们都会得到新的经纬

在安卓系统中,我每30秒通过GPS使用alarm manager获取一次位置信息。我想使用地质点检测设备是否在同一位置移动或存在。 如果设备位于同一位置,GPS在距离地图上显示的准确位置20米或30米的时间获得一些精确数据

所以在寻找移动设备时遇到了问题


如何查找设备未移动?

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

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

如果您有访问权限,请查看

否则,在中,您可以执行以下操作: 由于接收到的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 */ 
            }
double venueLat=纬度//上次已知纬度
双通道液化天然气=经度//最后已知的液化天然气
双latDistance=数学toRadians(userLat-venueLat);
双lngDistance=数学toRadians(userLng-venueLng);
双a=(Math.sin(latDistance/2)*Math.sin(latDistance/2))+
(Math.cos(Math.toRadians(userLat)))*
(Math.cos(Math.toRadians(venueLat)))*
(数学sin(距离/2))*
(数学sin(lngDistance/2));
double c=2*Math.atan2(Math.sqrt(a),Math.sqrt(1-a));
双区=6371*c;

如果(dist您可以使用播放服务提供的新的活动识别功能,并检查用户是否“静止”。阅读,了解更多信息,和/或签出或。我从未测试过它,但它看起来很有希望

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


设置一个不太小也不太大的范围是很重要的,因为总是有一个错误的边距。

location.getSpeed没有做你想做的事情?或者你没有阅读文档吗?我没有使用onLocationChanged()方法。我使用了Pending Intent来获取位置。使用LocationManager类,它将为您提供准确的结果以及您需要的任何计算结果。我如您所说,但GPS有时会在显示为旅行时从正确位置获取近似位置。谢谢。我从您那里获得了有用的信息请注意,活动识别功能只能在安装了play store的android设备上使用(大多数设备都是如此)识别功能是否会将设备位置发送到Google Play Server?@Renga我不这么认为。你应该问问Google。如果他们发送,我想这是匿名的,就像他们的其他服务一样。根据我的逻辑,如果它不提供任何有用的信息,他们就不需要它。我想android已经要求发送数据了在设备第一次运行时发送到谷歌,即使在那时,它也是匿名的,因此如果这项服务有任何不同,那将是很奇怪的。发送位置的原因之一是为了在将来更好地找到位置,因为你可以将数据与周围的wifi网络和手机塔进行交叉。感谢你提供关于P外行服务