For multiple points you can try this.
private String getDirectionsUrlForAllPoints(String travelMode, ArrayList<LatLng> points)
{
//int source, dest = 0;
StringBuilder polyLineUrl = new StringBuilder("http://maps.googleapis.com/maps/api/directions/");
// Output format
polyLineUrl.append("json?");
StringBuilder wayPointUrl = new StringBuilder();
for (int i = 0; i < points.size(); i++) {
if (i == 0) {
// Origin of route
polyLineUrl.append("origin=");
polyLineUrl.append(points.get(i).latitude);
polyLineUrl.append(",");
polyLineUrl.append(points.get(i).longitude);
continue;
}
// For poly line between last points
if (i == points.size() - 1) {
//dest = i;
// Destination of route
polyLineUrl.append("&destination=");
polyLineUrl.append(points.get(i).latitude);
polyLineUrl.append(",");
polyLineUrl.append(points.get(i).longitude);
continue;
}
wayPointUrl.append("|");
wayPointUrl.append(points.get(i).latitude);
wayPointUrl.append(",");
wayPointUrl.append(points.get(i).longitude);
/*https://maps.googleapis.com/maps/api/directions/json?origin=Adelaide,SA&destination=Adelaide,SA&waypoints=optimize:true
|-34.901374,138.737500|-34.918335,138.720412|-34.919335,138.750412|-34.928335,138.790412|-34.938335,138.800412
* */
}
// Sensor enabled
// Building the parameters to the web service
polyLineUrl.append("&sensor=false&optimize=true&mode="); //String parameters = str_origin+"&"+str_dest+"&"+sensor + ;
polyLineUrl.append(travelMode);
if (wayPointUrl.toString().length() > 0) {
wayPointUrl.insert(0, "&waypoints=");
}
// Building the url to the web service
String url = polyLineUrl.toString() + wayPointUrl.toString();
Log.d(TAG, "Url: " + url);
return url;
}
/**
* Receives a JSONObject and returns a list of lists containing latitude and longitude
*/
public List<List<HashMap<String, String>>> parseForAllPoints(JsonObject jObject) {
List<List<HashMap<String, String>>> routes = new ArrayList<List<HashMap<String, String>>>();
JsonArray jRoutes = null;
JsonArray jLegs = null;
JsonArray jSteps = null;
JsonObject jDistance = null;
JsonObject jDuration = null;
try {
jRoutes = jObject.getAsJsonArray("routes");
if (jRoutes != null) {
/** Traversing all routes */
for (int i = 0; i < jRoutes.size(); i++) {
jLegs = ((JsonObject) jRoutes.get(i)).getAsJsonArray("legs");
List<HashMap<String, String>> path = new ArrayList<HashMap<String, String>>();
/** Traversing all legs */
for (int j = 0; j < jLegs.size(); j++) {
/** Getting distance from the json data */
jDistance = ((JsonObject) jLegs.get(j)).getAsJsonObject("distance");
HashMap<String, String> hmDistance = new HashMap<String, String>();
hmDistance.put("distance", jDistance.get("text").getAsString());
/** Getting duration from the json data */
jDuration = ((JsonObject) jLegs.get(j)).getAsJsonObject("duration");
HashMap<String, String> hmDuration = new HashMap<String, String>();
hmDuration.put("duration", jDuration.get("text").getAsString());
/** Adding distance object to the path */
path.add(hmDistance);
/** Adding duration object to the path */
path.add(hmDuration);
jSteps = ((JsonObject) jLegs.get(j)).getAsJsonArray("steps");
/** Traversing all steps */
for (int k = 0; k < jSteps.size(); k++) {
String polyline = "";
polyline = ((JsonObject) ((JsonObject) jSteps.get(k)).get("polyline")).get("points").getAsString();
//Log.d(TAG, "parse: " + polyline);
List<LatLng> list = decodePoly(polyline);
/** Traversing all points */
for (int l = 0; l < list.size(); l++) {
HashMap<String, String> hm = new HashMap<String, String>();
if (list.get(l) != null) {
hm.put("lat", Double.toString(((LatLng) list.get(l)).latitude));
hm.put("lng", Double.toString(((LatLng) list.get(l)).longitude));
path.add(hm);
}
}
}
}
routes.add(path);
}
}
} catch (Exception e) {
e.printStackTrace();
}
return routes;
}
/**
* Method to decode polyline points
* Courtesy : jeffreysambells.com/2010/05/27/decoding-polylines-from-google-maps-direction-api-with-java
*/
private List<LatLng> decodePoly(String encoded) {
List<LatLng> poly = new ArrayList<LatLng>();
int index = 0, len = encoded.length();
int lat = 0, lng = 0;
while (index < len) {
int b, shift = 0, result = 0;
do {
b = encoded.charAt(index++) - 63;
result |= (b & 0x1f) << shift;
shift += 5;
} while (b >= 0x20);
int dlat = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
lat += dlat;
shift = 0;
result = 0;
do {
b = encoded.charAt(index++) - 63;
result |= (b & 0x1f) << shift;
shift += 5;
} while (b >= 0x20);
int dlng = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
lng += dlng;
LatLng p = new LatLng((((double) lat / 1E5)),
(((double) lng / 1E5)));
poly.add(p);
}
return poly;
}
You will get url from getDirectionsUrlForAllPoints(). make webservice(get) call and then parse that response using parseForAllPoints() method. then finally add arraylist of latlng to polyline. it will draw polyline with all points.
i have done this things in different class but i can't paste full code here. hope you will understand.