У меня проблемы с отслеживанием пройденного расстояния.
Я попробовал это, как в этой статье: Исходный код полностью там
СУММА пройденного расстояния - это не реальное пройденное расстояние, которое отображается в моей машине.
Через 2-3 км у меня разница между отображаемым расстоянием в моей машине и приложением 200-800 метров. На этом коротком расстоянии: о)
Я также понял, что расстояние, например, в то время как кривые вождения, уменьшается.
Я также пробовал несколько значений minTime и minDistance для слушателя, но безуспешно.
Что я делаю не так?
Когда я пользуюсь приложением «MyTracks», пройденное расстояние вычисляется очень, очень хорошо и правильно.
Мне нужен только способ суммировать полностью пройденный путь от начала до конца, не отображая его на картах Google. Неужели это так сложно?
С уважением
Frank
ОК, интересная часть кода:
public void startListening(final Activity activity)
{
if (locationManager == null)
{
locationManager = (LocationManager) activity.getSystemService(Context.LOCATION_SERVICE);
}
final Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
criteria.setAltitudeRequired(false);
criteria.setBearingRequired(false);
criteria.setCostAllowed(true);
criteria.setPowerRequirement(Criteria.POWER_LOW);
final String bestProvider = locationManager.getBestProvider(criteria, true);
if (bestProvider != null && bestProvider.length() > 0)
{
locationManager.requestLocationUpdates(bestProvider, GPSManager.gpsMinTime,
GPSManager.gpsMinDistance, locationListener);
}
else
{
final List<String> providers = locationManager.getProviders(true);
for (final String provider : providers)
{
locationManager.requestLocationUpdates(provider, GPSManager.gpsMinTime,
GPSManager.gpsMinDistance, locationListener);
}
}
}
и
private double calcGeoDistance(final double lat1, final double lon1, final double lat2, final double lon2)
{
double distance = 0.0;
try
{
final float[] results = new float[3];
Location.distanceBetween(lat1, lon1, lat2, lon2, results);
distance = results[0];
}
catch (final Exception ex)
{
distance = 0.0;
}
return distance;
}
и
private void updateMeasurement(){
double distance = calcGeoDistance(startLat,startLon,currentLat,currentLon) * multipliers[unitindex];
String distanceText = "" + RoundDecimal(distance,2) + " " + unitstrings[unitindex];
((TextView)findViewById(R.id.distance)).setText(distanceText);
}
и
public double RoundDecimal(double value, int decimalPlace)
{
BigDecimal bd = new BigDecimal(value);
bd = bd.setScale(decimalPlace, 6);
return bd.doubleValue();
}
Оооо, и когда я записываю это, кажется, что расстояние рассчитывается между начальной точкой и текущей точкой. Не между двумя последними измерениями с суммой всех значений, верно?