Site icon C1CTech

Android GoogleMap Example to Draw Route Between Two Locations

<p>In this article&comma; we will discuss how to draw route between two locations in GoogleMap using <span style&equals;"color&colon; &num;0000ff&semi;"><strong><a style&equals;"color&colon; &num;0000ff&semi;" href&equals;"https&colon;&sol;&sol;developers&period;google&period;com&sol;maps&sol;documentation&sol;directions&sol;intro">Directions API<&sol;a><&sol;strong><&sol;span>&period;<&sol;p>&NewLine;<h3><span style&equals;"color&colon; &num;000080&semi;"><strong>Directions API<&sol;strong><&sol;span><&sol;h3>&NewLine;<p>The Directions API is a service that calculates directions between locations using an HTTP request&period;<&sol;p>&NewLine;<p>With the Directions API&comma; you can&colon;<&sol;p>&NewLine;<ul>&NewLine;<li>Search for directions for several modes of transportation&comma; including transit&comma; driving&comma; walking or cycling&period;<&sol;li>&NewLine;<li>Return multi-part directions using a series of waypoints&period;<&sol;li>&NewLine;<li>Specify origins&comma; destinations&comma; and waypoints as text strings &lpar;e&period;g&period; &&num;8220&semi;Chicago&comma; IL&&num;8221&semi; or &&num;8220&semi;Darwin&comma; NT&comma; Australia&&num;8221&semi;&rpar;&comma; or as latitude&sol;longitude coordinates&comma; or as place IDs&period;<&sol;li>&NewLine;<&sol;ul>&NewLine;<p><strong><span style&equals;"color&colon; &num;008000&semi;">GET GITHUB CODE FROM<&sol;span><&sol;strong> <span style&equals;"color&colon; &num;0000ff&semi;"><strong><a style&equals;"color&colon; &num;0000ff&semi;" href&equals;"https&colon;&sol;&sol;github&period;com&sol;arunk7839&sol;MapDirectionDemo">HERE<&sol;a>&period;<&sol;strong><&sol;span><&sol;p>&NewLine;<h3><span style&equals;"color&colon; &num;000080&semi;"><strong>Creating New Project<&sol;strong><&sol;span><&sol;h3>&NewLine;<p><strong>1<&sol;strong>&period; Create a new project in <span style&equals;"color&colon; &num;008000&semi;"><strong>Android Studio<&sol;strong><&sol;span> from <span style&equals;"color&colon; &num;008000&semi;"><strong>File &Implies; New Project<&sol;strong><&sol;span> and fill the project details&period;<&sol;p>&NewLine;<p><strong>2<&sol;strong>&period; In the <span style&equals;"color&colon; &num;008000&semi;"><strong>Choose your project<&sol;strong> <&sol;span>dialog&comma; select the tab that corresponds to the platform you intended to develop for&period; Select <span style&equals;"color&colon; &num;008000&semi;"><strong>Phone and Tablet<&sol;strong><&sol;span>&period;<&sol;p>&NewLine;<p><strong>3<&sol;strong>&period;  Select <span style&equals;"color&colon; &num;008000&semi;"><strong>Google Maps Activity<&sol;strong><&sol;span>&comma; then click <span style&equals;"color&colon; &num;008000&semi;"><strong>Next<&sol;strong><&sol;span>&period;<&sol;p>&NewLine;<p><img class&equals;"alignnone size-full wp-image-1283" src&equals;"https&colon;&sol;&sol;c1ctech&period;com&sol;wp-content&sol;uploads&sol;2019&sol;11&sol;Screenshot-2019-11-14-18&period;05&period;53&period;png" alt&equals;"Screenshot 2019-11-14 18&period;05&period;53" width&equals;"1806" height&equals;"1100" &sol;><&sol;p>&NewLine;<p><strong>4<&sol;strong>&period;Enter your app name&comma; package name&comma; and project location&comma; programming language &lpar;Java or Kotlin&rpar;&comma; and the minimum Android API level supported by your app&comma; then click <span style&equals;"color&colon; &num;008000&semi;"><strong>Finish<&sol;strong><&sol;span>&period;<&sol;p>&NewLine;<p><img class&equals;"alignnone size-full wp-image-1309" src&equals;"https&colon;&sol;&sol;c1ctech&period;com&sol;wp-content&sol;uploads&sol;2019&sol;11&sol;Screenshot-2019-11-19-19&period;03&period;32&period;png" alt&equals;"Screenshot 2019-11-19 19&period;03&period;32" width&equals;"1798" height&equals;"1268" &sol;><&sol;p>&NewLine;<h4><span style&equals;"color&colon; &num;000080&semi;"><strong>Getting the API key<&sol;strong><&sol;span><&sol;h4>&NewLine;<p><strong>5<&sol;strong>&period;Copy the URL from <span style&equals;"color&colon; &num;0000ff&semi;"><strong>google&lowbar;map&lowbar;api&period;xml<&sol;strong><&sol;span> file to generate Google map API key&period;<&sol;p>&NewLine;<p><strong>6<&sol;strong>&period;Paste the copied URL at the browser&period; It will open the following page&period; Here I have selected my project <strong>GoogleMapExample<&sol;strong>&period;<&sol;p>&NewLine;<p><img class&equals;"alignnone size-full wp-image-1286" src&equals;"https&colon;&sol;&sol;c1ctech&period;com&sol;wp-content&sol;uploads&sol;2019&sol;11&sol;Screenshot-2019-11-14-18&period;24&period;38-2702355708-1574321829820&period;png" alt&equals;"Screenshot 2019-11-14 18&period;24&period;38" width&equals;"908" height&equals;"435" &sol;><&sol;p>&NewLine;<p><strong>7<&sol;strong>&period;Click on <span style&equals;"color&colon; &num;008000&semi;"><strong>Create API key<&sol;strong><&sol;span> to generate API key&period;<&sol;p>&NewLine;<p><img class&equals;"alignnone size-full wp-image-1288" src&equals;"https&colon;&sol;&sol;c1ctech&period;com&sol;wp-content&sol;uploads&sol;2019&sol;11&sol;Screenshot-2019-11-14-18&period;28&period;46-1128114308-1574321904187&period;png" alt&equals;"Screenshot 2019-11-14 18&period;28&period;46" width&equals;"752" height&equals;"369" &sol;><&sol;p>&NewLine;<p><strong>8<&sol;strong>&period;After clicking on <span style&equals;"color&colon; &num;008000&semi;"><strong>Create API key<&sol;strong><&sol;span>&comma; it will generate an API key displaying the following screen&period;<&sol;p>&NewLine;<p><img class&equals;"alignnone size-full wp-image-1290" src&equals;"https&colon;&sol;&sol;c1ctech&period;com&sol;wp-content&sol;uploads&sol;2019&sol;11&sol;Screenshot-2019-11-14-18&period;31&period;40&period;png" alt&equals;"Screenshot 2019-11-14 18&period;31&period;40" width&equals;"1592" height&equals;"796" &sol;><&sol;p>&NewLine;<p><strong>9<&sol;strong>&period;Copy this generated API key and click on the <span style&equals;"color&colon; &num;008000&semi;"><strong>CLOSE<&sol;strong><&sol;span> button&period; Now paste it in your <span style&equals;"color&colon; &num;008000&semi;"><strong>google&lowbar;map&lowbar;api&period;xml<&sol;strong><&sol;span> file&period;<&sol;p>&NewLine;<p><img class&equals;"alignnone size-full wp-image-1291" src&equals;"https&colon;&sol;&sol;c1ctech&period;com&sol;wp-content&sol;uploads&sol;2019&sol;11&sol;Screenshot-2019-11-14-18&period;34&period;28-2238297101-1573829461234&period;png" alt&equals;"Screenshot 2019-11-14 18&period;34&period;28" width&equals;"1974" height&equals;"310" &sol;><&sol;p>&NewLine;<p><strong>10<&sol;strong>&period;Select <span style&equals;"color&colon; &num;0000ff&semi;"><strong>Library<&sol;strong><&sol;span> from<span style&equals;"color&colon; &num;0000ff&semi;"><span style&equals;"color&colon; &num;000000&semi;"> the left side and then<&sol;span><&sol;span> search for <span style&equals;"color&colon; &num;008000&semi;"><strong>Direction API<&sol;strong><&sol;span> and enable it&period;<&sol;p>&NewLine;<p><img class&equals;"alignnone size-full wp-image-1310" src&equals;"https&colon;&sol;&sol;c1ctech&period;com&sol;wp-content&sol;uploads&sol;2019&sol;11&sol;Screenshot-2019-11-19-19&period;26&period;57&period;png" alt&equals;"Screenshot 2019-11-19 19&period;26&period;57" width&equals;"1386" height&equals;"592" &sol;><&sol;p>&NewLine;<p><strong>11<&sol;strong>&period;Go to <span style&equals;"color&colon; &num;0000ff&semi;"><strong>Credentials&period;<&sol;strong><&sol;span> Click on the currently created API key and the following screen appears&colon;<&sol;p>&NewLine;<p><img class&equals;"alignnone size-full wp-image-1312" src&equals;"https&colon;&sol;&sol;c1ctech&period;com&sol;wp-content&sol;uploads&sol;2019&sol;11&sol;Screenshot-2019-11-19-19&period;17&period;21&period;png" alt&equals;"Screenshot 2019-11-19 19&period;17&period;21" width&equals;"1516" height&equals;"924" &sol;><&sol;p>&NewLine;<p><strong>12<&sol;strong> &period;Under <span style&equals;"color&colon; &num;0000ff&semi;"><strong>Application restrictions <&sol;strong><&sol;span>select <strong><span style&equals;"color&colon; &num;008000&semi;">None<&sol;span> <&sol;strong>and under <span style&equals;"color&colon; &num;0000ff&semi;"><strong>API restrictions<&sol;strong> <&sol;span>select <span style&equals;"color&colon; &num;008000&semi;"><strong>Restrict Key <&sol;strong><&sol;span>and then select the two APIs<span style&equals;"color&colon; &num;008000&semi;"><strong> Direction API <&sol;strong><&sol;span>and<strong><span style&equals;"color&colon; &num;008000&semi;"> Maps SDK for Android<&sol;span>&period; <&sol;strong>Finally&comma; don&&num;8217&semi;t forget to click on <span style&equals;"color&colon; &num;008000&semi;"><strong>SAVE<&sol;strong><&sol;span>&period;<&sol;p>&NewLine;<p><img class&equals;"alignnone size-full wp-image-1311" src&equals;"https&colon;&sol;&sol;c1ctech&period;com&sol;wp-content&sol;uploads&sol;2019&sol;11&sol;Screenshot-2019-11-19-19&period;17&period;56&period;png" alt&equals;"Screenshot 2019-11-19 19&period;17&period;56" width&equals;"1520" height&equals;"1170" &sol;><&sol;p>&NewLine;<p class&equals;"p1"><strong>13<&sol;strong>&period;After creating an API key you must enable <strong><span style&equals;"color&colon; &num;008000&semi;">Billing<&sol;span><&sol;strong> on the Google Cloud Project at <strong><span style&equals;"color&colon; &num;0000ff&semi;">https&colon;&sol;&sol;console&period;cloud&period;google&period;com&sol;project&sol;&lowbar;&sol;billing&sol;enable<&sol;span><&sol;strong>&period; Learn more at <strong><span style&equals;"color&colon; &num;0000ff&semi;">https&colon;&sol;&sol;developers&period;google&period;com&sol;maps&sol;gmp-get-started<&sol;span><&sol;strong>&period;<&sol;p>&NewLine;<p><strong>14<&sol;strong>&period;Open <strong><span style&equals;"color&colon; &num;008000&semi;">build&period;gradle<&sol;span>&period;<&sol;strong>Here you can see a new library to integrate google Maps gets added&period;<&sol;p>&NewLine;<p><span style&equals;"color&colon; &num;0000ff&semi;"><strong>build&period;gradle<&sol;strong><&sol;span><&sol;p>&NewLine;<pre>dependencies &lbrace;&NewLine; implementation fileTree&lpar;dir&colon; 'libs'&comma; include&colon; &lbrack;'&ast;&period;jar'&rsqb;&rpar;&NewLine; implementation 'androidx&period;appcompat&colon;appcompat&colon;1&period;0&period;2'&NewLine;&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&sol;Google Maps<&sol;span><&sol;strong>&NewLine; implementation 'com&period;google&period;android&period;gms&colon;play-services-maps&colon;16&period;1&period;0'&NewLine; testImplementation 'junit&colon;junit&colon;4&period;12'&NewLine; androidTestImplementation 'androidx&period;test&colon;runner&colon;1&period;1&period;1'&NewLine; androidTestImplementation 'androidx&period;test&period;espresso&colon;espresso-core&colon;3&period;1&period;1'&NewLine;&rcub;<&sol;pre>&NewLine;<p><strong>15<&sol;strong>&period;Open  <span style&equals;"color&colon; &num;008000&semi;"><strong>AndroidManifest&period;xml<&sol;strong><&sol;span> file and add the below user-permissions as shown below&period;<&sol;p>&NewLine;<p><span style&equals;"color&colon; &num;0000ff&semi;"><strong>INTERNET<&sol;strong><&sol;span> – To communicate with API &period;<br &sol;>&NewLine;<span style&equals;"color&colon; &num;0000ff&semi;"><strong>ACCESS&lowbar;COARSE&lowbar;LOCATION<&sol;strong> <&sol;span>– To determine user’s location using WiFi and mobile cell data&period; It will give you an approximate location&period;<br &sol;>&NewLine;<span style&equals;"color&colon; &num;0000ff&semi;"><strong>ACCESS&lowbar;FINE&lowbar;LOCATION<&sol;strong><&sol;span> – To determine user’s location using GPS&period; It will give you precise location&period;<&sol;p>&NewLine;<p><span style&equals;"color&colon; &num;0000ff&semi;"><strong>AndroidManifest&period;xml<&sol;strong><&sol;span><&sol;p>&NewLine;<pre>&lt&semi;&quest;xml version&equals;"1&period;0" encoding&equals;"utf-8"&quest;&gt&semi;&NewLine;&lt&semi;manifest xmlns&colon;android&equals;"http&colon;&sol;&sol;schemas&period;android&period;com&sol;apk&sol;res&sol;android"&NewLine; package&equals;"com&period;example&period;mapdirectiondemo"&gt&semi;&NewLine;&NewLine; <span style&equals;"color&colon; &num;008000&semi;"><strong>&lt&semi;uses-permission android&colon;name&equals;"android&period;permission&period;INTERNET"&sol;&gt&semi;<&sol;strong><&sol;span>&NewLine;<span style&equals;"color&colon; &num;008000&semi;"><strong> &lt&semi;uses-permission android&colon;name&equals;"android&period;permission&period;ACCESS&lowbar;FINE&lowbar;LOCATION"&sol;&gt&semi;<&sol;strong><&sol;span>&NewLine;<span style&equals;"color&colon; &num;008000&semi;"><strong> &lt&semi;uses-permission android&colon;name&equals;"android&period;permission&period;ACCESS&lowbar;COARSE&lowbar;LOCATION"&sol;&gt&semi;<&sol;strong><&sol;span>&NewLine;&NewLine; &lt&semi;application&NewLine; android&colon;allowBackup&equals;"true"&NewLine; android&colon;icon&equals;"&commat;mipmap&sol;ic&lowbar;launcher"&NewLine; android&colon;label&equals;"&commat;string&sol;app&lowbar;name"&NewLine; android&colon;roundIcon&equals;"&commat;mipmap&sol;ic&lowbar;launcher&lowbar;round"&NewLine; android&colon;supportsRtl&equals;"true"&NewLine; android&colon;theme&equals;"&commat;style&sol;AppTheme"&gt&semi;&NewLine;&NewLine; &lt&semi;activity&NewLine; android&colon;name&equals;"&period;MapsActivity"&NewLine; android&colon;label&equals;"&commat;string&sol;title&lowbar;activity&lowbar;maps"&gt&semi;&NewLine; &lt&semi;intent-filter&gt&semi;&NewLine; &lt&semi;action android&colon;name&equals;"android&period;intent&period;action&period;MAIN" &sol;&gt&semi;&NewLine;&NewLine; &lt&semi;category android&colon;name&equals;"android&period;intent&period;category&period;LAUNCHER" &sol;&gt&semi;&NewLine; &lt&semi;&sol;intent-filter&gt&semi;&NewLine; &lt&semi;&sol;activity&gt&semi;&NewLine;&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">&lt&semi;meta-data&NewLine; android&colon;name&equals;"com&period;google&period;android&period;geo&period;API&lowbar;KEY"&NewLine; android&colon;value&equals;"&commat;string&sol;google&lowbar;maps&lowbar;key" &sol;&gt&semi;<&sol;span><&sol;strong>&NewLine; &lt&semi;&sol;application&gt&semi;&NewLine;&lt&semi;&sol;manifest&gt&semi;<&sol;pre>&NewLine;<p><strong>16<&sol;strong>&period;Google maps are implemented using <span style&equals;"color&colon; &num;008000&semi;"><strong>Support<&sol;strong><strong>MapFragment<&sol;strong><&sol;span> which is a subclass of <span style&equals;"color&colon; &num;008000&semi;"><strong>Fragment<&sol;strong><&sol;span> class&period; By default&comma; the XML file that defines the app’s layout is at <span style&equals;"color&colon; &num;008000&semi;"><strong>res&sol;layout&sol;activity&lowbar;maps&period;xml<&sol;strong><&sol;span>&period; It contains the following code&colon;<&sol;p>&NewLine;<p class&equals;"h3"><span style&equals;"color&colon; &num;0000ff&semi;"><strong>activity&lowbar;maps&period;xml<&sol;strong><&sol;span><&sol;p>&NewLine;<pre>&lt&semi;&quest;xml version&equals;"1&period;0" encoding&equals;"utf-8"&quest;&gt&semi;&NewLine;&lt&semi;fragment xmlns&colon;android&equals;"http&colon;&sol;&sol;schemas&period;android&period;com&sol;apk&sol;res&sol;android"&NewLine; xmlns&colon;map&equals;"http&colon;&sol;&sol;schemas&period;android&period;com&sol;apk&sol;res-auto"&NewLine; xmlns&colon;tools&equals;"http&colon;&sol;&sol;schemas&period;android&period;com&sol;tools"&NewLine; android&colon;id&equals;"&commat;&plus;id&sol;map"&NewLine; android&colon;name&equals;"com&period;google&period;android&period;gms&period;maps&period;SupportMapFragment"&NewLine; android&colon;layout&lowbar;width&equals;"match&lowbar;parent"&NewLine; android&colon;layout&lowbar;height&equals;"match&lowbar;parent"&NewLine; tools&colon;context&equals;"&period;MapsActivity" &sol;&gt&semi;<&sol;pre>&NewLine;<p><strong>17<&sol;strong>&period;Let&&num;8217&semi;s understand the methods and AsyncTask used in <span style&equals;"color&colon; &num;008000&semi;"><strong>MainActivity&period;Java<&sol;strong><&sol;span>&period;<&sol;p>&NewLine;<p><strong><span style&equals;"color&colon; &num;0000ff&semi;">getDirectionsUrl&lpar;&rpar;&colon; <&sol;span><&sol;strong>Getting URL to the Google Directions API based on output&comma; parameters&comma; and the API key&period;<&sol;p>&NewLine;<pre>private String getDirectionsUrl&lpar;LatLng origin&comma; LatLng dest&rpar; &lbrace;&NewLine;&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&sol; Origin of route<&sol;span><&sol;strong>&NewLine; String str&lowbar;origin &equals; "origin&equals;" &plus; origin&period;latitude &plus; "&comma;" &plus; origin&period;longitude&semi;&NewLine;&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&sol; Destination of route<&sol;span><&sol;strong>&NewLine; String str&lowbar;dest &equals; "destination&equals;" &plus; dest&period;latitude &plus; "&comma;" &plus; dest&period;longitude&semi;&NewLine;<strong><span style&equals;"color&colon; &num;008000&semi;"> &NewLine; &sol;&sol; Setting mode<&sol;span><&sol;strong>&NewLine; String mode &equals; "mode&equals;driving"&semi;&NewLine;&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&sol; Building the parameters to the web service<&sol;span><&sol;strong>&NewLine; String parameters &equals; str&lowbar;origin &plus; "&amp&semi;" &plus; str&lowbar;dest &plus; "&amp&semi;" &plus; mode&semi;&NewLine;&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&sol; Output format<&sol;span><&sol;strong>&NewLine; String output &equals; "json"&semi;&NewLine;&NewLine; <span style&equals;"color&colon; &num;008000&semi;"><strong>&sol;&sol; Building the url to the web service<&sol;strong><&sol;span>&NewLine; String url &equals; "https&colon;&sol;&sol;maps&period;googleapis&period;com&sol;maps&sol;api&sol;directions&sol;" &plus; output &plus; "&quest;" &plus; parameters &plus; "&amp&semi;key&equals;" &plus; "AIzaSyD&lowbar;L8g3AcwXBKnEjhvLJwBXwI3L51LjQUU"&semi;&NewLine;&NewLine; return url&semi;&NewLine;&rcub;<&sol;pre>&NewLine;<p>A Directions API request takes the following form&colon;<&sol;p>&NewLine;<pre>String url &equals; "https&colon;&sol;&sol;maps&period;googleapis&period;com&sol;maps&sol;api&sol;directions&sol;" &plus; output &plus; "&quest;" &NewLine;&plus; parameters &plus; "&amp&semi;key&equals;" &plus; "API KEY"&semi;<&sol;pre>&NewLine;<p class&equals;"p1">The output may be either of the following values <span style&equals;"color&colon; &num;0000ff&semi;"><strong>json<&sol;strong><&sol;span> or <span style&equals;"color&colon; &num;0000ff&semi;"><strong>xml<&sol;strong><&sol;span>&period; In my case&comma; it holds a <span style&equals;"color&colon; &num;008000&semi;"><strong>&OpenCurlyDoubleQuote;json”<&sol;strong><&sol;span> string and the parameter string is created as&colon;<&sol;p>&NewLine;<p class&equals;"p1"><span style&equals;"color&colon; &num;008000&semi;"><b>String parameters &equals; str&lowbar;origin &plus; &&num;8220&semi;&amp&semi;&&num;8221&semi; &plus; str&lowbar;dest &plus; &&num;8220&semi;&amp&semi;&&num;8221&semi; &plus; mode&semi;<&sol;b><&sol;span><&sol;p>&NewLine;<p> <span style&equals;"color&colon; &num;0000ff&semi;"><strong>str&lowbar;origin and str&lowbar;dest<&sol;strong> <&sol;span>&colon; The address&comma; textual latitude&sol;longitude value&comma; or place ID from which you wish to calculate directions&period;<&sol;p>&NewLine;<p class&equals;"p1">We have set the <span style&equals;"color&colon; &num;008000&semi;"><b>mode&equals;driving<&sol;b><&sol;span> in the current application&period;<br &sol;>&NewLine;The other modes of transport are&colon;<&sol;p>&NewLine;<ul class&equals;"ul1">&NewLine;<li class&equals;"li1">driving &lpar;default&rpar;<&sol;li>&NewLine;<li class&equals;"li1">walking<&sol;li>&NewLine;<li class&equals;"li1">bicycling<&sol;li>&NewLine;<li class&equals;"li1">transit<&sol;li>&NewLine;<&sol;ul>&NewLine;<p><strong><span style&equals;"color&colon; &num;0000ff&semi;">downloadUrl&lpar;&rpar;&colon; <&sol;span><&sol;strong>A method to download JSON data <span style&equals;"color&colon; &num;0000ff&semi;"><span style&equals;"color&colon; &num;000000&semi;">using <&sol;span><&sol;span><span style&equals;"color&colon; &num;0000ff&semi;"><span style&equals;"color&colon; &num;000000&semi;"><strong><span style&equals;"color&colon; &num;008000&semi;">HttpURLConnection<&sol;span><&sol;strong> <&sol;span><&sol;span>from the URL returned by <strong><span style&equals;"color&colon; &num;008000&semi;">getDirectionsUrl&lpar;&rpar;<&sol;span><span style&equals;"color&colon; &num;0000ff&semi;"><span style&equals;"color&colon; &num;000000&semi;">&period;<&sol;span><&sol;span><&sol;strong><&sol;p>&NewLine;<pre>private String downloadUrl&lpar;String strUrl&rpar; throws IOException &lbrace;&NewLine; String data &equals; ""&semi;&NewLine; InputStream iStream &equals; null&semi;&NewLine; HttpURLConnection urlConnection &equals; null&semi;&NewLine; try &lbrace;&NewLine; URL url &equals; new URL&lpar;strUrl&rpar;&semi;&NewLine;&NewLine; urlConnection &equals; &lpar;HttpURLConnection&rpar; url&period;openConnection&lpar;&rpar;&semi;&NewLine;&NewLine; urlConnection&period;connect&lpar;&rpar;&semi;&NewLine;&NewLine; iStream &equals; urlConnection&period;getInputStream&lpar;&rpar;&semi;&NewLine;&NewLine; BufferedReader br &equals; new BufferedReader&lpar;new InputStreamReader&lpar;iStream&rpar;&rpar;&semi;&NewLine;&NewLine; StringBuffer sb &equals; new StringBuffer&lpar;&rpar;&semi;&NewLine;&NewLine; String line &equals; ""&semi;&NewLine; while &lpar;&lpar;line &equals; br&period;readLine&lpar;&rpar;&rpar; &excl;&equals; null&rpar; &lbrace;&NewLine; sb&period;append&lpar;line&rpar;&semi;&NewLine; &rcub;&NewLine;&NewLine; data &equals; sb&period;toString&lpar;&rpar;&semi;&NewLine;&NewLine; br&period;close&lpar;&rpar;&semi;&NewLine;&NewLine; &rcub; catch &lpar;Exception e&rpar; &lbrace;&NewLine; Log&period;d&lpar;"Exception"&comma; e&period;toString&lpar;&rpar;&rpar;&semi;&NewLine; &rcub; finally &lbrace;&NewLine; iStream&period;close&lpar;&rpar;&semi;&NewLine; urlConnection&period;disconnect&lpar;&rpar;&semi;&NewLine; &rcub;&NewLine; return data&semi;&NewLine;&rcub;<&sol;pre>&NewLine;<p><strong><span style&equals;"color&colon; &num;0000ff&semi;">ParserTask<&sol;span><&sol;strong> &colon;  <span style&equals;"color&colon; &num;008000&semi;"><strong>ParserTask<&sol;strong><&sol;span> is a class that extends <span style&equals;"color&colon; &num;008000&semi;"><strong>AsyncTask<&sol;strong><&sol;span>&period; Here we will parse the JSON data returned by <strong class&equals;"gc go"><span style&equals;"color&colon; &num;008000&semi;">downloadUrl<&sol;span> <&sol;strong>method&period;<&sol;p>&NewLine;<&excl;-- WP QUADS Content Ad Plugin v&period; 2&period;0&period;98&period;1 -->&NewLine;<div class&equals;"quads-location quads-ad2" id&equals;"quads-ad2" style&equals;"float&colon;none&semi;margin&colon;0px&semi;">&NewLine;&NewLine;<&sol;div>&NewLine;&NewLine;<pre>private class ParserTask extends AsyncTask&lt&semi;String&comma; Integer&comma; List&lt&semi;List&lt&semi;HashMap&lt&semi;String&comma; String&gt&semi;&gt&semi;&gt&semi;&gt&semi; &lbrace;&NewLine;&NewLine; <span style&equals;"color&colon; &num;008000&semi;"><strong>&sol;&sol; Parsing the data in non-ui thread<&sol;strong><&sol;span>&NewLine; &commat;Override&NewLine; protected List&lt&semi;List&lt&semi;HashMap&lt&semi;String&comma; String&gt&semi;&gt&semi;&gt&semi; doInBackground&lpar;String&period;&period;&period; jsonData&rpar; &lbrace;&NewLine;&NewLine; JSONObject jObject&semi;&NewLine; List&lt&semi;List&lt&semi;HashMap&lt&semi;String&comma; String&gt&semi;&gt&semi;&gt&semi; routes &equals; null&semi;&NewLine;&NewLine; try &lbrace;&NewLine; jObject &equals; new JSONObject&lpar;jsonData&lbrack;0&rsqb;&rpar;&semi;&NewLine; DataParser parser &equals; new DataParser&lpar;&rpar;&semi;&NewLine;&NewLine; routes &equals; parser&period;parse&lpar;jObject&rpar;&semi;&NewLine; &rcub; catch &lpar;Exception e&rpar; &lbrace;&NewLine; e&period;printStackTrace&lpar;&rpar;&semi;&NewLine; &rcub;&NewLine; return routes&semi;&NewLine; &rcub;&NewLine;&NewLine; &commat;Override&NewLine; protected void onPostExecute&lpar;List&lt&semi;List&lt&semi;HashMap&lt&semi;String&comma; String&gt&semi;&gt&semi;&gt&semi; result&rpar; &lbrace;&NewLine; ArrayList points &equals; new ArrayList&lpar;&rpar;&semi;&NewLine; PolylineOptions lineOptions &equals; new PolylineOptions&lpar;&rpar;&semi;&NewLine;&NewLine; for &lpar;int i &equals; 0&semi; i &lt&semi; result&period;size&lpar;&rpar;&semi; i&plus;&plus;&rpar; &lbrace;&NewLine;&NewLine; List&lt&semi;HashMap&lt&semi;String&comma; String&gt&semi;&gt&semi; path &equals; result&period;get&lpar;i&rpar;&semi;&NewLine;&NewLine; for &lpar;int j &equals; 0&semi; j &lt&semi; path&period;size&lpar;&rpar;&semi; j&plus;&plus;&rpar; &lbrace;&NewLine; HashMap&lt&semi;String&comma; String&gt&semi; point &equals; path&period;get&lpar;j&rpar;&semi;&NewLine;&NewLine; double lat &equals; Double&period;parseDouble&lpar;point&period;get&lpar;"lat"&rpar;&rpar;&semi;&NewLine; double lng &equals; Double&period;parseDouble&lpar;point&period;get&lpar;"lng"&rpar;&rpar;&semi;&NewLine; LatLng position &equals; new LatLng&lpar;lat&comma; lng&rpar;&semi;&NewLine;&NewLine; points&period;add&lpar;position&rpar;&semi;&NewLine; &rcub;&NewLine;&NewLine; lineOptions&period;addAll&lpar;points&rpar;&semi;&NewLine; lineOptions&period;width&lpar;12&rpar;&semi;&NewLine; lineOptions&period;color&lpar;Color&period;RED&rpar;&semi;&NewLine; lineOptions&period;geodesic&lpar;true&rpar;&semi;&NewLine;&NewLine; &rcub;&NewLine;&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&sol; Drawing polyline in the Google Map <&sol;span><&sol;strong>&NewLine;&NewLine; if &lpar;points&period;size&lpar;&rpar; &excl;&equals; 0&rpar;&NewLine; mMap&period;addPolyline&lpar;lineOptions&rpar;&semi;&NewLine; &rcub;&NewLine; &rcub;<&sol;pre>&NewLine;<p>In the <span style&equals;"color&colon; &num;0000ff&semi;"><strong class&equals;"gc go">doInBackround <&sol;strong><span style&equals;"color&colon; &num;000000&semi;">method&comma; <&sol;span><&sol;span>we will parse the JSON data&period; So we are parsing the data using another class i&period;e <strong class&equals;"gc go"><span style&equals;"color&colon; &num;008000&semi;">DataParser<&sol;span>&period;<&sol;strong><br &sol;>&NewLine;In the <strong class&equals;"gc go"><span style&equals;"color&colon; &num;0000ff&semi;">onPostExecute<&sol;span> <&sol;strong>method&comma; we will add polyline to draw a route on Google Map&period;<&sol;p>&NewLine;<p><strong><span style&equals;"color&colon; &num;0000ff&semi;">DataParser<&sol;span>&colon; <&sol;strong>Right-click on root project directory under Java folder and create  a new Java Class <span style&equals;"color&colon; &num;008000&semi;"><strong>DataParser<&sol;strong><strong>&period;Java <&sol;strong><&sol;span>and write the below code&colon;<&sol;p>&NewLine;<p><span style&equals;"color&colon; &num;0000ff&semi;"><strong>DataParser&period;Java<&sol;strong><&sol;span><&sol;p>&NewLine;<pre>package com&period;example&period;mapdirectiondemo&semi;&NewLine;&NewLine;import com&period;google&period;android&period;gms&period;maps&period;model&period;LatLng&semi;&NewLine;&NewLine;import org&period;json&period;JSONArray&semi;&NewLine;import org&period;json&period;JSONException&semi;&NewLine;import org&period;json&period;JSONObject&semi;&NewLine;&NewLine;import java&period;util&period;ArrayList&semi;&NewLine;import java&period;util&period;HashMap&semi;&NewLine;import java&period;util&period;List&semi;&NewLine;&NewLine;public class DataParser &lbrace;&NewLine;&NewLine; <span style&equals;"color&colon; &num;008000&semi;"><strong>&sol;&ast;&ast;&NewLine; &ast; Receives a JSONObject and returns a list of lists containing latitude and longitude&NewLine; &ast;&sol;<&sol;strong><&sol;span>&NewLine; public List&lt&semi;List&lt&semi;HashMap&lt&semi;String&comma; String&gt&semi;&gt&semi;&gt&semi; parse&lpar;JSONObject jObject&rpar; &lbrace;&NewLine;&NewLine; List&lt&semi;List&lt&semi;HashMap&lt&semi;String&comma; String&gt&semi;&gt&semi;&gt&semi; routes &equals; new ArrayList&lt&semi;List&lt&semi;HashMap&lt&semi;String&comma; String&gt&semi;&gt&semi;&gt&semi;&lpar;&rpar;&semi;&NewLine; JSONArray jRoutes &equals; null&semi;&NewLine; JSONArray jLegs &equals; null&semi;&NewLine; JSONArray jSteps &equals; null&semi;&NewLine;&NewLine; try &lbrace;&NewLine;&NewLine; jRoutes &equals; jObject&period;getJSONArray&lpar;"routes"&rpar;&semi;&NewLine;&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&ast;&ast; Traversing all routes &ast;&sol;<&sol;span><&sol;strong>&NewLine; for &lpar;int i &equals; 0&semi; i &lt&semi; jRoutes&period;length&lpar;&rpar;&semi; i&plus;&plus;&rpar; &lbrace;&NewLine; jLegs &equals; &lpar;&lpar;JSONObject&rpar; jRoutes&period;get&lpar;i&rpar;&rpar;&period;getJSONArray&lpar;"legs"&rpar;&semi;&NewLine; List path &equals; new ArrayList&lt&semi;HashMap&lt&semi;String&comma; String&gt&semi;&gt&semi;&lpar;&rpar;&semi;&NewLine;&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&ast;&ast; Traversing all legs &ast;&sol;<&sol;span><&sol;strong>&NewLine; for &lpar;int j &equals; 0&semi; j &lt&semi; jLegs&period;length&lpar;&rpar;&semi; j&plus;&plus;&rpar; &lbrace;&NewLine; jSteps &equals; &lpar;&lpar;JSONObject&rpar; jLegs&period;get&lpar;j&rpar;&rpar;&period;getJSONArray&lpar;"steps"&rpar;&semi;&NewLine;&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&ast;&ast; Traversing all steps &ast;&sol;<&sol;span><&sol;strong>&NewLine; for &lpar;int k &equals; 0&semi; k &lt&semi; jSteps&period;length&lpar;&rpar;&semi; k&plus;&plus;&rpar; &lbrace;&NewLine; String polyline &equals; ""&semi;&NewLine; polyline &equals; &lpar;String&rpar; &lpar;&lpar;JSONObject&rpar; &lpar;&lpar;JSONObject&rpar; jSteps&period;get&lpar;k&rpar;&rpar;&period;get&lpar;"polyline"&rpar;&rpar;&period;get&lpar;"points"&rpar;&semi;&NewLine; List list &equals; decodePoly&lpar;polyline&rpar;&semi;&NewLine;&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&ast;&ast; Traversing all points &ast;&sol;<&sol;span><&sol;strong>&NewLine; for &lpar;int l &equals; 0&semi; l &lt&semi; list&period;size&lpar;&rpar;&semi; l&plus;&plus;&rpar; &lbrace;&NewLine; HashMap&lt&semi;String&comma; String&gt&semi; hm &equals; new HashMap&lt&semi;String&comma; String&gt&semi;&lpar;&rpar;&semi;&NewLine; hm&period;put&lpar;"lat"&comma; Double&period;toString&lpar;&lpar;&lpar;LatLng&rpar; list&period;get&lpar;l&rpar;&rpar;&period;latitude&rpar;&rpar;&semi;&NewLine; hm&period;put&lpar;"lng"&comma; Double&period;toString&lpar;&lpar;&lpar;LatLng&rpar; list&period;get&lpar;l&rpar;&rpar;&period;longitude&rpar;&rpar;&semi;&NewLine; path&period;add&lpar;hm&rpar;&semi;&NewLine; &rcub;&NewLine; &rcub;&NewLine; routes&period;add&lpar;path&rpar;&semi;&NewLine; &rcub;&NewLine; &rcub;&NewLine;&NewLine; &rcub; catch &lpar;JSONException e&rpar; &lbrace;&NewLine; e&period;printStackTrace&lpar;&rpar;&semi;&NewLine; &rcub; catch &lpar;Exception e&rpar; &lbrace;&NewLine; &rcub;&NewLine;&NewLine; return routes&semi;&NewLine; &rcub;&NewLine;&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&ast;&ast;&NewLine; &ast; Method to decode polyline points&NewLine; &ast;&sol;<&sol;span><&sol;strong>&NewLine; private List decodePoly&lpar;String encoded&rpar; &lbrace;&NewLine;&NewLine; List poly &equals; new ArrayList&lpar;&rpar;&semi;&NewLine; int index &equals; 0&comma; len &equals; encoded&period;length&lpar;&rpar;&semi;&NewLine; int lat &equals; 0&comma; lng &equals; 0&semi;&NewLine;&NewLine; while &lpar;index &lt&semi; len&rpar; &lbrace;&NewLine; int b&comma; shift &equals; 0&comma; result &equals; 0&semi;&NewLine; do &lbrace;&NewLine; b &equals; encoded&period;charAt&lpar;index&plus;&plus;&rpar; - 63&semi;&NewLine; result &vert;&equals; &lpar;b &amp&semi; 0x1f&rpar; &lt&semi;&lt&semi; shift&semi;&NewLine; shift &plus;&equals; 5&semi;&NewLine; &rcub; while &lpar;b &gt&semi;&equals; 0x20&rpar;&semi;&NewLine; int dlat &equals; &lpar;&lpar;result &amp&semi; 1&rpar; &excl;&equals; 0 &quest; ~&lpar;result &gt&semi;&gt&semi; 1&rpar; &colon; &lpar;result &gt&semi;&gt&semi; 1&rpar;&rpar;&semi;&NewLine; lat &plus;&equals; dlat&semi;&NewLine;&NewLine; shift &equals; 0&semi;&NewLine; result &equals; 0&semi;&NewLine; do &lbrace;&NewLine; b &equals; encoded&period;charAt&lpar;index&plus;&plus;&rpar; - 63&semi;&NewLine; result &vert;&equals; &lpar;b &amp&semi; 0x1f&rpar; &lt&semi;&lt&semi; shift&semi;&NewLine; shift &plus;&equals; 5&semi;&NewLine; &rcub; while &lpar;b &gt&semi;&equals; 0x20&rpar;&semi;&NewLine; int dlng &equals; &lpar;&lpar;result &amp&semi; 1&rpar; &excl;&equals; 0 &quest; ~&lpar;result &gt&semi;&gt&semi; 1&rpar; &colon; &lpar;result &gt&semi;&gt&semi; 1&rpar;&rpar;&semi;&NewLine; lng &plus;&equals; dlng&semi;&NewLine;&NewLine; LatLng p &equals; new LatLng&lpar;&lpar;&lpar;&lpar;double&rpar; lat &sol; 1E5&rpar;&rpar;&comma;&NewLine; &lpar;&lpar;&lpar;double&rpar; lng &sol; 1E5&rpar;&rpar;&rpar;&semi;&NewLine; poly&period;add&lpar;p&rpar;&semi;&NewLine; &rcub;&NewLine;&NewLine; return poly&semi;&NewLine; &rcub;&NewLine;&rcub;<&sol;pre>&NewLine;<p class&equals;"p1"><span style&equals;"color&colon; &num;0000ff&semi;"><strong>parse&lpar;&rpar;<&sol;strong><&sol;span> method will receive a <strong><span style&equals;"color&colon; &num;008000&semi;">JSONObject<&sol;span><&sol;strong> and returns a list of lists containing latitude and longitude&period;<&sol;p>&NewLine;<p class&equals;"p1">Here we will split JSONArray by using <strong class&equals;"gc go"><span style&equals;"color&colon; &num;008000&semi;">getJSONArray<&sol;span><br &sol;>&NewLine;<&sol;strong>And we will traverse all routes&comma; legs&comma; steps&comma; points&comma; etc&period; And then we will add all the traversing points to the list&period;<br &sol;>&NewLine;<span style&equals;"color&colon; &num;0000ff&semi;"><strong class&equals;"gc go">routes&period;add&lpar;path&rpar;&semi;<&sol;strong><&sol;span><&sol;p>&NewLine;<p class&equals;"p1"><strong><span style&equals;"color&colon; &num;0000ff&semi;">decodepoly&lpar;&rpar;<&sol;span><&sol;strong> &colon; Method to decode polyline points&period;<&sol;p>&NewLine;<h3><span style&equals;"color&colon; &num;000080&semi;"><strong>Complete Code&colon;<&sol;strong><&sol;span><&sol;h3>&NewLine;<p><strong>18<&sol;strong>&period;Open <span style&equals;"color&colon; &num;008000&semi;"><strong>MainActivity&period;Java<&sol;strong><&sol;span> and write the below code&colon;<&sol;p>&NewLine;<p><span style&equals;"color&colon; &num;0000ff&semi;"><strong>MainActivity&period;Java<&sol;strong><&sol;span><&sol;p>&NewLine;<pre>package com&period;example&period;mapdirectiondemo&semi;&NewLine;&NewLine;import android&period;graphics&period;Color&semi;&NewLine;import android&period;os&period;AsyncTask&semi;&NewLine;import android&period;os&period;Bundle&semi;&NewLine;import android&period;util&period;Log&semi;&NewLine;import com&period;google&period;android&period;gms&period;maps&period;CameraUpdateFactory&semi;&NewLine;import com&period;google&period;android&period;gms&period;maps&period;GoogleMap&semi;&NewLine;import com&period;google&period;android&period;gms&period;maps&period;OnMapReadyCallback&semi;&NewLine;import com&period;google&period;android&period;gms&period;maps&period;SupportMapFragment&semi;&NewLine;import com&period;google&period;android&period;gms&period;maps&period;model&period;LatLng&semi;&NewLine;import com&period;google&period;android&period;gms&period;maps&period;model&period;MarkerOptions&semi;&NewLine;import com&period;google&period;android&period;gms&period;maps&period;model&period;PolylineOptions&semi;&NewLine;import org&period;json&period;JSONObject&semi;&NewLine;import java&period;io&period;BufferedReader&semi;&NewLine;import java&period;io&period;IOException&semi;&NewLine;import java&period;io&period;InputStream&semi;&NewLine;import java&period;io&period;InputStreamReader&semi;&NewLine;import java&period;net&period;HttpURLConnection&semi;&NewLine;import java&period;net&period;URL&semi;&NewLine;import java&period;util&period;ArrayList&semi;&NewLine;import java&period;util&period;HashMap&semi;&NewLine;import java&period;util&period;List&semi;&NewLine;&NewLine;import androidx&period;fragment&period;app&period;FragmentActivity&semi;&NewLine;&NewLine;public class MapsActivity extends FragmentActivity implements OnMapReadyCallback &lbrace;&NewLine;&NewLine; private GoogleMap mMap&semi;&NewLine;&NewLine; MarkerOptions origin&comma; destination&semi;&NewLine;&NewLine;&NewLine; &commat;Override&NewLine; protected void onCreate&lpar;Bundle savedInstanceState&rpar; &lbrace;&NewLine; super&period;onCreate&lpar;savedInstanceState&rpar;&semi;&NewLine; setContentView&lpar;R&period;layout&period;activity&lowbar;maps&rpar;&semi;&NewLine;&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&sol; Obtain the SupportMapFragment and get notified when the map is ready to be used&period;<&sol;span><&sol;strong>&NewLine; SupportMapFragment mapFragment &equals; &lpar;SupportMapFragment&rpar; getSupportFragmentManager&lpar;&rpar;&NewLine; &period;findFragmentById&lpar;R&period;id&period;map&rpar;&semi;&NewLine; mapFragment&period;getMapAsync&lpar;this&rpar;&semi;&NewLine;&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&sol;Setting marker to draw route between these two points<&sol;span><&sol;strong>&NewLine; origin &equals; new MarkerOptions&lpar;&rpar;&period;position&lpar;new LatLng&lpar;12&period;9121&comma; 77&period;6446&rpar;&rpar;&period;title&lpar;"HSR Layout"&rpar;&period;snippet&lpar;"origin"&rpar;&semi;&NewLine; destination &equals; new MarkerOptions&lpar;&rpar;&period;position&lpar;new LatLng&lpar;12&period;9304&comma; 77&period;6784&rpar;&rpar;&period;title&lpar;"Bellandur"&rpar;&period;snippet&lpar;"destination"&rpar;&semi;&NewLine;&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&sol; Getting URL to the Google Directions API<&sol;span><&sol;strong>&NewLine; String url &equals; getDirectionsUrl&lpar;origin&period;getPosition&lpar;&rpar;&comma; destination&period;getPosition&lpar;&rpar;&rpar;&semi;&NewLine;&NewLine; DownloadTask downloadTask &equals; new DownloadTask&lpar;&rpar;&semi;&NewLine;&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&sol; Start downloading json data from Google Directions API<&sol;span><&sol;strong>&NewLine; downloadTask&period;execute&lpar;url&rpar;&semi;&NewLine;&NewLine; &rcub;&NewLine;&NewLine; &commat;Override&NewLine; public void onMapReady&lpar;GoogleMap googleMap&rpar; &lbrace;&NewLine; mMap &equals; googleMap&semi;&NewLine; mMap&period;addMarker&lpar;origin&rpar;&semi;&NewLine; mMap&period;addMarker&lpar;destination&rpar;&semi;&NewLine; mMap&period;animateCamera&lpar;CameraUpdateFactory&period;newLatLngZoom&lpar;origin&period;getPosition&lpar;&rpar;&comma; 10&rpar;&rpar;&semi;&NewLine; &rcub;&NewLine;&NewLine; private class DownloadTask extends AsyncTask&lt&semi;String&comma; Void&comma; String&gt&semi; &lbrace;&NewLine;&NewLine; &commat;Override&NewLine; protected String doInBackground&lpar;String&period;&period;&period; url&rpar; &lbrace;&NewLine;&NewLine; String data &equals; ""&semi;&NewLine;&NewLine; try &lbrace;&NewLine; data &equals; downloadUrl&lpar;url&lbrack;0&rsqb;&rpar;&semi;&NewLine; &rcub; catch &lpar;Exception e&rpar; &lbrace;&NewLine; Log&period;d&lpar;"Background Task"&comma; e&period;toString&lpar;&rpar;&rpar;&semi;&NewLine; &rcub;&NewLine; return data&semi;&NewLine; &rcub;&NewLine;&NewLine; &commat;Override&NewLine; protected void onPostExecute&lpar;String result&rpar; &lbrace;&NewLine; super&period;onPostExecute&lpar;result&rpar;&semi;&NewLine; ParserTask parserTask &equals; new ParserTask&lpar;&rpar;&semi;&NewLine; parserTask&period;execute&lpar;result&rpar;&semi;&NewLine; &rcub;&NewLine; &rcub;&NewLine;&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&ast;&ast;&NewLine; &ast; A class to parse the JSON format&NewLine; &ast;&sol;<&sol;span><&sol;strong>&NewLine; private class ParserTask extends AsyncTask&lt&semi;String&comma; Integer&comma; List&lt&semi;List&lt&semi;HashMap&lt&semi;String&comma; String&gt&semi;&gt&semi;&gt&semi;&gt&semi; &lbrace;&NewLine;&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&sol; Parsing the data in non-ui thread<&sol;span><&sol;strong>&NewLine; &commat;Override&NewLine; protected List&lt&semi;List&lt&semi;HashMap&lt&semi;String&comma; String&gt&semi;&gt&semi;&gt&semi; doInBackground&lpar;String&period;&period;&period; jsonData&rpar; &lbrace;&NewLine;&NewLine; JSONObject jObject&semi;&NewLine; List&lt&semi;List&lt&semi;HashMap&lt&semi;String&comma; String&gt&semi;&gt&semi;&gt&semi; routes &equals; null&semi;&NewLine;&NewLine; try &lbrace;&NewLine; jObject &equals; new JSONObject&lpar;jsonData&lbrack;0&rsqb;&rpar;&semi;&NewLine; DirectionsJSONParser parser &equals; new DirectionsJSONParser&lpar;&rpar;&semi;&NewLine;&NewLine; routes &equals; parser&period;parse&lpar;jObject&rpar;&semi;&NewLine; &rcub; catch &lpar;Exception e&rpar; &lbrace;&NewLine; e&period;printStackTrace&lpar;&rpar;&semi;&NewLine; &rcub;&NewLine; return routes&semi;&NewLine; &rcub;&NewLine;&NewLine; &commat;Override&NewLine; protected void onPostExecute&lpar;List&lt&semi;List&lt&semi;HashMap&lt&semi;String&comma; String&gt&semi;&gt&semi;&gt&semi; result&rpar; &lbrace;&NewLine; ArrayList points &equals; new ArrayList&lpar;&rpar;&semi;&NewLine; PolylineOptions lineOptions &equals; new PolylineOptions&lpar;&rpar;&semi;&NewLine; &NewLine; for &lpar;int i &equals; 0&semi; i &lt&semi; result&period;size&lpar;&rpar;&semi; i&plus;&plus;&rpar; &lbrace;&NewLine;&NewLine; List&lt&semi;HashMap&lt&semi;String&comma; String&gt&semi;&gt&semi; path &equals; result&period;get&lpar;i&rpar;&semi;&NewLine;&NewLine; for &lpar;int j &equals; 0&semi; j &lt&semi; path&period;size&lpar;&rpar;&semi; j&plus;&plus;&rpar; &lbrace;&NewLine; HashMap&lt&semi;String&comma; String&gt&semi; point &equals; path&period;get&lpar;j&rpar;&semi;&NewLine;&NewLine; double lat &equals; Double&period;parseDouble&lpar;point&period;get&lpar;"lat"&rpar;&rpar;&semi;&NewLine; double lng &equals; Double&period;parseDouble&lpar;point&period;get&lpar;"lng"&rpar;&rpar;&semi;&NewLine; LatLng position &equals; new LatLng&lpar;lat&comma; lng&rpar;&semi;&NewLine;&NewLine; points&period;add&lpar;position&rpar;&semi;&NewLine; &rcub;&NewLine;&NewLine; lineOptions&period;addAll&lpar;points&rpar;&semi;&NewLine; lineOptions&period;width&lpar;12&rpar;&semi;&NewLine; lineOptions&period;color&lpar;Color&period;RED&rpar;&semi;&NewLine; lineOptions&period;geodesic&lpar;true&rpar;&semi;&NewLine;&NewLine; &rcub;&NewLine;&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&sol; Drawing polyline in the Google Map<&sol;span> <&sol;strong>&NewLine; if &lpar;points&period;size&lpar;&rpar; &excl;&equals; 0&rpar;&NewLine; mMap&period;addPolyline&lpar;lineOptions&rpar;&semi;&NewLine; &rcub;&NewLine; &rcub;&NewLine;&NewLine; private String getDirectionsUrl&lpar;LatLng origin&comma; LatLng dest&rpar; &lbrace;&NewLine;&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&sol; Origin of route<&sol;span><&sol;strong>&NewLine; String str&lowbar;origin &equals; "origin&equals;" &plus; origin&period;latitude &plus; "&comma;" &plus; origin&period;longitude&semi;&NewLine;&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&sol; Destination of route<&sol;span><&sol;strong>&NewLine; String str&lowbar;dest &equals; "destination&equals;" &plus; dest&period;latitude &plus; "&comma;" &plus; dest&period;longitude&semi;&NewLine; &NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&sol;setting transportation mode<&sol;span><&sol;strong>&NewLine; String mode &equals; "mode&equals;driving"&semi;&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&sol; Building the parameters to the web service<&sol;span><&sol;strong>&NewLine; String parameters &equals; str&lowbar;origin &plus; "&amp&semi;" &plus; str&lowbar;dest &plus; "&amp&semi;" &plus; sensor &plus; "&amp&semi;" &plus; mode&semi;&NewLine;&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&sol; Output format<&sol;span><&sol;strong>&NewLine; String output &equals; "json"&semi;&NewLine;&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&sol; Building the url to the web service<&sol;span><&sol;strong>&NewLine; String url &equals; "https&colon;&sol;&sol;maps&period;googleapis&period;com&sol;maps&sol;api&sol;directions&sol;" &plus; output &plus; "&quest;" &plus; parameters &plus; "&amp&semi;key&equals;" &plus; "AIzaSyD&lowbar;L8g3AcwXBKnEjhvLJwBXwI3L51LjQUU"&semi;&NewLine;&NewLine; return url&semi;&NewLine; &rcub;&NewLine;&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&ast;&ast;&NewLine; &ast; A method to download json data from url&NewLine; &ast;&sol;<&sol;span><&sol;strong>&NewLine; private String downloadUrl&lpar;String strUrl&rpar; throws IOException &lbrace;&NewLine; String data &equals; ""&semi;&NewLine; InputStream iStream &equals; null&semi;&NewLine; HttpURLConnection urlConnection &equals; null&semi;&NewLine; try &lbrace;&NewLine; URL url &equals; new URL&lpar;strUrl&rpar;&semi;&NewLine;&NewLine; urlConnection &equals; &lpar;HttpURLConnection&rpar; url&period;openConnection&lpar;&rpar;&semi;&NewLine;&NewLine; urlConnection&period;connect&lpar;&rpar;&semi;&NewLine;&NewLine; iStream &equals; urlConnection&period;getInputStream&lpar;&rpar;&semi;&NewLine;&NewLine; BufferedReader br &equals; new BufferedReader&lpar;new InputStreamReader&lpar;iStream&rpar;&rpar;&semi;&NewLine;&NewLine; StringBuffer sb &equals; new StringBuffer&lpar;&rpar;&semi;&NewLine;&NewLine; String line &equals; ""&semi;&NewLine; while &lpar;&lpar;line &equals; br&period;readLine&lpar;&rpar;&rpar; &excl;&equals; null&rpar; &lbrace;&NewLine; sb&period;append&lpar;line&rpar;&semi;&NewLine; &rcub;&NewLine;&NewLine; data &equals; sb&period;toString&lpar;&rpar;&semi;&NewLine;&NewLine; br&period;close&lpar;&rpar;&semi;&NewLine;&NewLine; &rcub; catch &lpar;Exception e&rpar; &lbrace;&NewLine; Log&period;d&lpar;"Exception"&comma; e&period;toString&lpar;&rpar;&rpar;&semi;&NewLine; &rcub; finally &lbrace;&NewLine; iStream&period;close&lpar;&rpar;&semi;&NewLine; urlConnection&period;disconnect&lpar;&rpar;&semi;&NewLine; &rcub;&NewLine; return data&semi;&NewLine; &rcub;&NewLine;&NewLine;&rcub;<&sol;pre>&NewLine;<p>When you run your application it will look like this&colon;<&sol;p>&NewLine;<p><img class&equals;"alignnone wp-image-1313" src&equals;"https&colon;&sol;&sol;c1ctech&period;com&sol;wp-content&sol;uploads&sol;2019&sol;11&sol;Screenshot&lowbar;1574166034&period;png" alt&equals;"Screenshot&lowbar;1574166034" width&equals;"534" height&equals;"949" &sol;><&sol;p>&NewLine;<p>I hope this article will help you in understanding how to draw a route between two locations using Directions API&period; Thank You&period;<&sol;p>&NewLine;<p>&nbsp&semi;<&sol;p>&NewLine;<h4><&sol;h4>&NewLine;&NewLine;

Exit mobile version