Привет, вы имеете в виду Location.getSpeed()
Я полагаю, что это необязательное поле, и, вероятно, оно зависит от устройства, которое действительно его поддерживает.Сначала попробуйте это
Criteria criteria = new Criteria();
criteria.setSpeedRequired(true);
LocationProvider[] providers = mLocationManager.getProviders(criteria, false);
if (providers == null || providers.length == 0) {
//Sorry it doesn't do it by default.
}
К счастью, математика и наука помогут нам :) Просто рассчитайте скорость, когда вы получаете обновления от вашего LocationProviders
.Обязательно рассчитайте расстояние между широтой и долготой во времени как разницу между записанными временными метками двух обновлений Местоположения.
...
onLocationChanged(Location location) {
if (mOldLocation != null) {
float distance = getDistance(mOldLocation, location);
long time = location.getTime() - mOldLocation.getTime();
mSpeed = distance/time;
}
mOldLocation = location;
}
Это не обязательно будет очень точно (вероятно, очень шумно), но этоЛучше приготовить лимонад, чем гнилые фрукты ... надеюсь, это поможет.Обязательно сравнивайте дельты только одного и того же поставщикаВы, вероятно, обнаружите, что настраиваете ручной расчет, потому что поставщики устройств очень разнообразны и не гарантируют, что время всегда движется вперед.