Примечание об устаревании Следующее описанное решение основано на Java-клиенте Google для Google Maps Services , который не предназначен для использования в приложении Android из-за вероятность потери ключей API (как отмечено PK Gupta в комментариях ). Следовательно, я бы больше не рекомендовал использовать его в производственных целях.
Как уже было описано в Praktik 1012 *, вы можете использовать API указаний Google, чтобы оценить время, необходимое для перехода из одного места в другое, с учетом направлений и трафика. Но вам не нужно использовать веб-API и создавать свою собственную оболочку, вместо этого используйте реализацию Java , предоставляемую самим Google, которая доступна через репозиторий Maven / gradle .
Добавьте google-maps-services в build.gradle вашего приложения :
dependencies {
compile 'com.google.maps:google-maps-services:0.2.5'
}
Выполните запрос и извлеките продолжительность:
// - Put your api key (https://developers.google.com/maps/documentation/directions/get-api-key) here:
private static final String API_KEY = "AZ.."
/**
Use Google's directions api to calculate the estimated time needed to
drive from origin to destination by car.
@param origin The address/coordinates of the origin (see {@link DirectionsApiRequest#origin(String)} for more information on how to format the input)
@param destination The address/coordinates of the destination (see {@link DirectionsApiRequest#destination(String)} for more information on how to format the input)
@return The estimated time needed to travel human-friendly formatted
*/
public String getDurationForRoute(String origin, String destination)
// - We need a context to access the API
GeoApiContext geoApiContext = new GeoApiContext.Builder()
.apiKey(apiKey)
.build();
// - Perform the actual request
DirectionsResult directionsResult = DirectionsApi.newRequest(geoApiContext)
.mode(TravelMode.DRIVING)
.origin(origin)
.destination(destination)
.await();
// - Parse the result
DirectionsRoute route = directionsResult.routes[0];
DirectionsLeg leg = route.legs[0];
Duration duration = leg.duration;
return duration.humanReadable;
}
Для простоты этот код не обрабатывает исключения, случаи ошибок (например, маршрут не найден -> rout.length == 0), а также не использует более одного маршрута или участка . Источник и пункт назначения также могут быть установлены непосредственно как LatLng
экземпляры (см. DirectionsApiRequest#origin(LatLng)
и DirectionsApiRequest#destination(LatLng)
.
Дополнительная информация: android.jlelse.eu - API Google Maps Directions