android位置更新频率

时间:2015-01-09 00:09:09

标签: android gps location

我希望获得5个连续更新位置,以检查用户是否正在移动并确保GPS已校准。我做了以下事情:

我添加了android.permission.ACCESS_FINE_LOCATION“到清单和onConnected:

mLocationRequest = new LocationRequest();
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
mLocationRequest.setInterval(1000); // Update location every second
mLocationRequest.setFastestInterval(1000);
LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this); 

在onLocationChanged中我做了以下事情:

locationRetries++;
switch (locationRetries) {
case 1: {
    firstLatitude = location.getLatitude();
    firstLongitude = location.getLongitude();               
}
case 5: {
    locationRetries = 0;
    lastLatitude = location.getLatitude();
    lastLongitude = location.getLongitude();
    accuracy = Math.round(location.getAccuracy());
    stopLocationUpdates();//will remove from location updates and disconnects
    float[] results = new float[1];
    Location.distanceBetween(firstLatitude, firstLongitude, lastLatitude, lastLongitude, results);              
    if (results[0] > 5)... //if moved at least 5meters, show popup that the user is moving else do your thing
}

现在我有3个问题:

1)即使我将两个参数都设置为1000毫秒,检索5次更新似乎还需要不到5秒的时间。

2)即使我走得很快,所有5个位置(至少是第一个和最后一个)都是完全相同的位置。我以为我的动作可能太慢了

3)我关闭了我的应用程序,在远处重新打开它并按下按钮。我几乎立刻得到了以前的位置。我再次按下按钮然后我得到了我所在的真实位置。这就好像它没有真正要求/等待GPS的位置,而是采取了当时远程不准确的最后一个位置。我没有任何“获取最后知道位置”的代码。

我想最重要的是:我怎么能确定它确实询问GPS我在哪里询问的位置以及连续5次询问时,给我真实的位置而不是来自缓存(?)。

1 个答案:

答案 0 :(得分:2)

Fused Location Provider

  

智能地管理底层定位技术,并根据您的需求为您提供最佳位置。

     
      
  • 简单的API:允许您指定高级别需求,如“高精度”或“低功耗”,而不必担心位置提供商。
  •   
  • 立即可用:让您的应用可以立即访问最佳的最新位置。
  •   
  • 功效:最大限度地减少应用对电量的使用。 根据所有传入的位置请求和可用的传感器,融合位置提供商选择最有效的方式来满足这些需求。
  •   
  • 多功能性:满足广泛的需求,从需要高度精确定位的前景使用到需要定期更新位置的背景使用,而且功率影响可以忽略不计。
  •   

无法保证融合位置提供商将使用GPS - 如果它具有您要求的最近精确位置,它将返回直到返回更好的位置(即,实时GPS返回准确位置)。这样可以确保您可以更快地获得更好的位置,而无需等待GPS启动。

如果您特别需要GPS数据,则需要使用LocationManager使用GPS_PROVIDER

如果您正在尝试确定用户当前正在做什么,您可以使用ActivityRecognitionApi,它返回DetectedActivity,例如WALKING或STILL:使用它会提供更快的方法来理解用户目前正在做。