Route directions for driving mode, bicycling and walking mode in Google Map Android API V2

March 23, 2013
By

In this article, we will develop an Android application which draws route directions between two locations for driving mode, bicycling mode and walking mode in Google Map Android API V2.



This application makes use of Google Map Android API V2 and Google Directions API.

This application is developed in Eclipse (4.2.1) with ADT plugin (21.1.0) and Android SDK (21.1.0) and tested in a real Android device (Android 2.3.6  -  GingerBread ).


1. Create a new Android application project namely “LocationModesMapV2″

New Android Application project

Figure 1 : New Android Application project


2. Configure the project

Configure the application project

Figure 2 : Configure the application project


3. Design application launcher icon

Design application launcher icon

Figure 3 : Design application launcher icon


4. Create a blank activity

Create a blank activity

Figure 4 : Create a blank activity


5. Enter MainActivity details

Enter Main Activity Details

Figure 5 : Enter Main Activity Details


6. Download and configure Google Play Services Library in Eclipse

Google Map for Android is now integrated with Google Play Services. So we need to set up Google Play Service Library for developing Google Map application in Android.

Please follow the given below link to setup Google Play Service library in Eclipse.

http://developer.android.com/google/play-services/setup.html


7. Add Google Play Services Library to this project

Link Google Play Services Library to this project

Figure 6 : Link Google Play Services Library to this project


8. Get the API key for Google Maps Android API V2

We need to get an API key from Google to use Google Maps in Android application.

Please follow the given below link to get the API key for Google Maps Android API v2.

https://developers.google.com/maps/documentation/android/start


9. Add Android Support library to this project

By default, Android support library (android-support-v4.jar ) is added to this project by Eclipse IDE to the directory libs. If it is not added, we can do it manually by doing the following steps :

  • Open Project Explorer by Clicking “Window -> Show View -> Project Explorer”
  • Right click this project
  • Then from popup menu, Click “Android Tools -> Add Support Library “

10. Update the file res/values/strings.xml


<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">LocationModesMapV2</string>
    <string name="action_settings">Settings</string>
    <string name="hello_world">Hello world!</string>
    <string name="str_rb_driving">Driving</string>
    <string name="str_rb_bicycling">BiCycling</string>
    <string name="str_rb_walking">Walking</string>

</resources>


11. Update the layout file res/layout/activity_main.xml


<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

    <RadioGroup
        android:id="@+id/rg_modes"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:orientation="horizontal" >

        <RadioButton android:id="@+id/rb_driving"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/str_rb_driving"
            android:checked="true" />

        <RadioButton android:id="@+id/rb_bicycling"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/str_rb_bicycling" />

        <RadioButton android:id="@+id/rb_walking"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/str_rb_walking" />

    </RadioGroup>

    <fragment
        android:id="@+id/map"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@id/rg_modes"
        class="com.google.android.gms.maps.SupportMapFragment" />

</RelativeLayout>


12. Create a new class namely “DirectionsJSONParser” in the file src/in/wptrafficanalyzer/locationmodesmapv2/DirectionsJSONParser.java


package in.wptrafficanalyzer.locationmodesmapv2;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import com.google.android.gms.maps.model.LatLng;

public class DirectionsJSONParser {

    /** Receives a JSONObject and returns a list of lists containing latitude and longitude */
    public List<List<HashMap<String,String>>> parse(JSONObject jObject){

        List<List<HashMap<String, String>>> routes = new ArrayList<List<HashMap<String,String>>>() ;
        JSONArray jRoutes = null;
        JSONArray jLegs = null;
        JSONArray jSteps = null;

        try {

            jRoutes = jObject.getJSONArray("routes");

            /** Traversing all routes */
            for(int i=0;i<jRoutes.length();i++){
                jLegs = ( (JSONObject)jRoutes.get(i)).getJSONArray("legs");
                List path = new ArrayList<HashMap<String, String>>();

                /** Traversing all legs */
                for(int j=0;j<jLegs.length();j++){
                    jSteps = ( (JSONObject)jLegs.get(j)).getJSONArray("steps");

                    /** Traversing all steps */
                    for(int k=0;k<jSteps.length();k++){
                        String polyline = "";
                        polyline = (String)((JSONObject)((JSONObject)jSteps.get(k)).get("polyline")).get("points");
                        List<LatLng> list = decodePoly(polyline);

                        /** Traversing all points */
                        for(int l=0;l<list.size();l++){
                            HashMap<String, String> hm = new HashMap<String, String>();
                            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 (JSONException e) {
            e.printStackTrace();
        }catch (Exception e){
        }
        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;
    }
}


13. Update the class “MainActivity” in the file src/in/wptrafficanalyzer/locationmodesmapv2/MainActivity.java


package in.wptrafficanalyzer.locationmodesmapv2;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import org.json.JSONObject;

import android.graphics.Color;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.util.Log;
import android.view.Menu;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;
import android.widget.Toast;

import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.GoogleMap.OnMapClickListener;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
import com.google.android.gms.maps.model.PolylineOptions;
public class MainActivity extends FragmentActivity {

    GoogleMap map;
    RadioButton rbDriving;
    RadioButton rbBiCycling;
    RadioButton rbWalking;
    RadioGroup rgModes;
    ArrayList<LatLng> markerPoints;
    int mMode=0;
    final int MODE_DRIVING=0;
    final int MODE_BICYCLING=1;
    final int MODE_WALKING=2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Getting reference to rb_driving
        rbDriving = (RadioButton) findViewById(R.id.rb_driving);

        // Getting reference to rb_bicylcing
        rbBiCycling = (RadioButton) findViewById(R.id.rb_bicycling);

        // Getting reference to rb_walking
        rbWalking = (RadioButton) findViewById(R.id.rb_walking);

        // Getting Reference to rg_modes
        rgModes = (RadioGroup) findViewById(R.id.rg_modes);

        rgModes.setOnCheckedChangeListener(new OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {

                // Checks, whether start and end locations are captured
                if(markerPoints.size() >= 2){
                    LatLng origin = markerPoints.get(0);
                    LatLng dest = markerPoints.get(1);

                    // Getting URL to the Google Directions API
                    String url = getDirectionsUrl(origin, dest);

                    DownloadTask downloadTask = new DownloadTask();

                    // Start downloading json data from Google Directions API
                    downloadTask.execute(url);
                }
            }
        });

        // Initializing
        markerPoints = new ArrayList<LatLng>();

        // Getting reference to SupportMapFragment of the activity_main
        SupportMapFragment fm = (SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.map);

        // Getting Map for the SupportMapFragment
        map = fm.getMap();

        // Enable MyLocation Button in the Map
        map.setMyLocationEnabled(true);

        // Setting onclick event listener for the map
        map.setOnMapClickListener(new OnMapClickListener() {

            @Override
            public void onMapClick(LatLng point) {

                // Already two locations
                if(markerPoints.size()>1){
                    markerPoints.clear();
                    map.clear();
                }

                // Adding new item to the ArrayList
                markerPoints.add(point);

                // Draws Start and Stop markers on the Google Map
                drawStartStopMarkers();

                // Checks, whether start and end locations are captured
                if(markerPoints.size() >= 2){
                    LatLng origin = markerPoints.get(0);
                    LatLng dest = markerPoints.get(1);

                    // Getting URL to the Google Directions API
                    String url = getDirectionsUrl(origin, dest);

                    DownloadTask downloadTask = new DownloadTask();

                    // Start downloading json data from Google Directions API
                    downloadTask.execute(url);
                }
            }
        });
    }

    // Drawing Start and Stop locations
    private void drawStartStopMarkers(){

        for(int i=0;i<markerPoints.size();i++){

            // Creating MarkerOptions
            MarkerOptions options = new MarkerOptions();

            // Setting the position of the marker
            options.position(markerPoints.get(i) );

            /**
            * For the start location, the color of marker is GREEN and
            * for the end location, the color of marker is RED.
            */
            if(i==0){
                options.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN));
            }else if(i==1){
                options.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED));
            }

            // Add new marker to the Google Map Android API V2
            map.addMarker(options);
        }
    }
    private String getDirectionsUrl(LatLng origin,LatLng dest){

        // Origin of route
        String str_origin = "origin="+origin.latitude+","+origin.longitude;

        // Destination of route
        String str_dest = "destination="+dest.latitude+","+dest.longitude;

        // Sensor enabled
        String sensor = "sensor=false";

        // Travelling Mode
        String mode = "mode=driving";

        if(rbDriving.isChecked()){
            mode = "mode=driving";
            mMode = 0 ;
        }else if(rbBiCycling.isChecked()){
            mode = "mode=bicycling";
            mMode = 1;
        }else if(rbWalking.isChecked()){
            mode = "mode=walking";
            mMode = 2;
        }

        // Building the parameters to the web service
        String parameters = str_origin+"&"+str_dest+"&"+sensor+"&"+mode;

        // Output format
        String output = "json";

        // Building the url to the web service
        String url = "https://maps.googleapis.com/maps/api/directions/"+output+"?"+parameters;

        return url;
    }

    /** A method to download json data from url */
    private String downloadUrl(String strUrl) throws IOException{
        String data = "";
        InputStream iStream = null;
        HttpURLConnection urlConnection = null;
        try{
            URL url = new URL(strUrl);

            // Creating an http connection to communicate with url
            urlConnection = (HttpURLConnection) url.openConnection();

            // Connecting to url
            urlConnection.connect();

            // Reading data from url
            iStream = urlConnection.getInputStream();

            BufferedReader br = new BufferedReader(new InputStreamReader(iStream));

            StringBuffer sb = new StringBuffer();

            String line = "";
            while( ( line = br.readLine()) != null){
                sb.append(line);
            }

            data = sb.toString();

            br.close();

        }catch(Exception e){
            Log.d("Exception while downloading url", e.toString());
        }finally{
            iStream.close();
            urlConnection.disconnect();
        }
        return data;
    }

    // Fetches data from url passed
    private class DownloadTask extends AsyncTask<String, Void, String>{

        // Downloading data in non-ui thread
        @Override
        protected String doInBackground(String... url) {

            // For storing data from web service
            String data = "";

            try{
                // Fetching the data from web service
                data = downloadUrl(url[0]);
            }catch(Exception e){
                Log.d("Background Task",e.toString());
            }
            return data;
        }

        // Executes in UI thread, after the execution of
        // doInBackground()
        @Override
        protected void onPostExecute(String result) {
            super.onPostExecute(result);

            ParserTask parserTask = new ParserTask();

            // Invokes the thread for parsing the JSON data
            parserTask.execute(result);
        }
    }

    /** A class to parse the Google Places in JSON format */
    private class ParserTask extends AsyncTask<String, Integer, List<List<HashMap<String,String>>> >{

        // Parsing the data in non-ui thread
        @Override
        protected List<List<HashMap<String, String>>> doInBackground(String... jsonData) {

            JSONObject jObject;
            List<List<HashMap<String, String>>> routes = null;

            try{
                jObject = new JSONObject(jsonData[0]);
                DirectionsJSONParser parser = new DirectionsJSONParser();

                // Starts parsing data
                routes = parser.parse(jObject);
            }catch(Exception e){
                e.printStackTrace();
            }
            return routes;
        }

        // Executes in UI thread, after the parsing process
        @Override
        protected void onPostExecute(List<List<HashMap<String, String>>> result) {
            ArrayList<LatLng> points = null;
            PolylineOptions lineOptions = null;
            MarkerOptions markerOptions = new MarkerOptions();

            // Traversing through all the routes
            for(int i=0;i<result.size();i++){
                points = new ArrayList<LatLng>();
                lineOptions = new PolylineOptions();

                // Fetching i-th route
                List<HashMap<String, String>> path = result.get(i);

                // Fetching all the points in i-th route
                for(int j=0;j<path.size();j++){
                    HashMap<String,String> point = path.get(j);

                    double lat = Double.parseDouble(point.get("lat"));
                    double lng = Double.parseDouble(point.get("lng"));
                    LatLng position = new LatLng(lat, lng);

                    points.add(position);
                }

                // Adding all the points in the route to LineOptions
                lineOptions.addAll(points);
                lineOptions.width(2);

                // Changing the color polyline according to the mode
                if(mMode==MODE_DRIVING)
                    lineOptions.color(Color.RED);
                else if(mMode==MODE_BICYCLING)
                    lineOptions.color(Color.GREEN);
                else if(mMode==MODE_WALKING)
                    lineOptions.color(Color.BLUE);
            }

            if(result.size()<1){
                Toast.makeText(getBaseContext(), "No Points", Toast.LENGTH_SHORT).show();
                return;
            }

            // Drawing polyline in the Google Map for the i-th route
            map.addPolyline(lineOptions);
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
}


14. Update the file AndroidManifest.xml


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="in.wptrafficanalyzer.locationmodesmapv2"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />

    <uses-permission android:name="android.permission.INTERNET"/>

    <permission
        android:name="in.wptrafficanalyzer.locationmodesmapv2.permission.MAPS_RECEIVE"
        android:protectionLevel="signature" />

    <uses-permission android:name="in.wptrafficanalyzer.locationmodesmapv2.permission.MAPS_RECEIVE" />

    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

    <uses-feature
        android:glEsVersion="0x00020000"
        android:required="true"/>

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="in.wptrafficanalyzer.locationmodesmapv2.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <meta-data
            android:name="com.google.android.maps.v2.API_KEY"
            android:value="YOUR_API_KEY"/>
    </application>
</manifest>

Note : Replace “YOUR_API_KEY” at line 45 with the api key obtained in the step 8.



15. Screenshot of the application

Route directions for driving, bicycling and walking mode in Google Map Android API V2

Figure 7 : Route directions for driving, bicycling and walking mode in Google Map Android API V2


16. Download Source Code


How to hire me?

I am George Mathew, working as software architect and Android app developer at wptrafficanalyzer.in

You can hire me on hourly basis or on project basis for Android applications development.

For hiring me, please mail your requirements to info@wptrafficanalyzer.in.

My other blogs
store4js.blogspot.com


Android Knowledge Quiz

Ready to test your knowledge in Android? Take this quiz :



Tags: , , , , , , , ,

26 Responses to Route directions for driving mode, bicycling and walking mode in Google Map Android API V2

  1. Basribaz on March 24, 2013 at 8:31 pm

    how to run in android device (asus memo pad), thanks

  2. imam nur on March 24, 2013 at 9:49 pm

    Thanks a lot for your tutorial.. :)
    I am from Indonesia. I want to ask you, why bicycling is not working in the area of ​​Jakarta, Indonesia?

  3. deepak on March 26, 2013 at 12:46 pm

    Hello,
    I have run this code then I am getting NullPointerException.How to resolve this problem.

    • Vipin on April 15, 2013 at 4:14 pm

      hello,

      while i am running the code also getting some null pointer exception… Could you please help to resolve this problem…

      Regards,
      vipin

  4. Wedar on May 30, 2013 at 12:39 pm

    hello,
    thanks for tutorial, i always love your tutorial
    i have one question : i want to diplaying not only driving direction but i want to displaying all mode for the direction. could you help to resolve this problem, sorry for bad english

  5. Le Thai Binh on July 4, 2013 at 1:28 pm

    Hello, I’m Vietnamese. I have a question, how to draw three route at the same time in the Map. I don’t want to use RadioButton. For example, when i route direction, it’ll show three route in driving, walking, bycycling.
    It’s similar with Suggested routes in maps.google.com

    It’s my error when i try do that.
    07-04 14:49:22.400: E/AndroidRuntime(787): FATAL EXCEPTION: main
    07-04 14:49:22.400: E/AndroidRuntime(787): java.lang.NullPointerException
    07-04 14:49:22.400: E/AndroidRuntime(787): at maps.aj.bt.(Unknown Source)
    07-04 14:49:22.400: E/AndroidRuntime(787): at maps.aj.bq.b(Unknown Source)
    07-04 14:49:22.400: E/AndroidRuntime(787): at maps.aj.bq.a(Unknown Source)
    07-04 14:49:22.400: E/AndroidRuntime(787): at maps.aj.al.a(Unknown Source)
    07-04 14:49:22.400: E/AndroidRuntime(787): at bcn.onTransact(SourceFile:137)
    07-04 14:49:22.400: E/AndroidRuntime(787): at android.os.Binder.transact(Binder.java:279)
    07-04 14:49:22.400: E/AndroidRuntime(787): at com.google.android.gms.maps.internal.IGoogleMapDelegate$a$a.addPolyline(Unknown Source)
    07-04 14:49:22.400: E/AndroidRuntime(787): at com.google.android.gms.maps.GoogleMap.addPolyline(Unknown Source)
    07-04 14:49:22.400: E/AndroidRuntime(787): at routePath.ParserTask.onPostExecute(ParserTask.java:95)
    07-04 14:49:22.400: E/AndroidRuntime(787): at routePath.ParserTask.onPostExecute(ParserTask.java:1)
    07-04 14:49:22.400: E/AndroidRuntime(787): at android.os.AsyncTask.finish(AsyncTask.java:417)
    07-04 14:49:22.400: E/AndroidRuntime(787): at android.os.AsyncTask.access$300(AsyncTask.java:127)
    07-04 14:49:22.400: E/AndroidRuntime(787): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:429)
    07-04 14:49:22.400: E/AndroidRuntime(787): at android.os.Handler.dispatchMessage(Handler.java:99)
    07-04 14:49:22.400: E/AndroidRuntime(787): at android.os.Looper.loop(Looper.java:123)
    07-04 14:49:22.400: E/AndroidRuntime(787): at android.app.ActivityThread.main(ActivityThread.java:3683)
    07-04 14:49:22.400: E/AndroidRuntime(787): at java.lang.reflect.Method.invokeNative(Native Method)
    07-04 14:49:22.400: E/AndroidRuntime(787): at java.lang.reflect.Method.invoke(Method.java:507)
    07-04 14:49:22.400: E/AndroidRuntime(787): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
    07-04 14:49:22.400: E/AndroidRuntime(787): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
    07-04 14:49:22.400: E/AndroidRuntime(787): at dalvik.system.NativeStart.main(Native Method)

    • george on July 4, 2013 at 1:54 pm

      Hello,
      Create and execute three different objects of DownloadTask with different modes.

      • Le Thai Binh on July 6, 2013 at 9:13 pm

        Thanks for your help but I tried to do that before.
        String url;
        DownloadTask downloadTask;

        url = GetUrl.getDirectionsUrl(origin, dest, “mode=driving”);
        Log.d(“URL_Driving: “, url);
        downloadTask = new DownloadTask(googleMap, tvST);
        downloadTask.execute(url);

        url = GetUrl.getDirectionsUrl(origin, dest, “mode=bicycling”);
        Log.d(“URL_Bicycling: “, url);
        downloadTask = new DownloadTask(googleMap, tvST);
        downloadTask.execute(url);

        url = GetUrl.getDirectionsUrl(origin, dest, “mode=walking”);
        Log.d(“URL_Walking: “, url);
        downloadTask = new DownloadTask(googleMap, tvST);
        downloadTask.execute(url);

        But i get error at:
        com.google.android.gms.maps.GoogleMap.addPolyline(Unknown Source).
        I only show one route at the same time. It couldn’t show two or three route.
        I seperated DirectionsJSONParser, DownloadTask, GetURL, ParserTask into class.
        I think error at googleMap.addPolyline(lineOptions). Any suggest for me?

        • Le Thai Binh on July 7, 2013 at 1:57 pm

          Thanks for your help. I resolved, i set PolylineOption p = new PolylineOption instead off PolylineOption = null.
          I’m a student and a newbie to Mapv2. I have a question? Is there any way to get suggested route in driving mode? I mean show 3 route in driving mode.

  6. Student on July 12, 2013 at 1:35 pm

    Hi thanks for this wunderfull tutorial. i have a question. I want to do this with the help of Action bar. It means the user has the posibillity to select betweeen driving, walking or bycicling mode with the help of Action bar. And idea

    • Student on July 12, 2013 at 2:22 pm

      Hello, I am able to do this with the action bar. but i have a problem. At start of aplication a set as a travel mode default driving. it shows the route for driving mode. But if i want to change it to walking mode. the Url is shown right (means correct) it fetches data from server and for the fetching data the travel mode is not changing. It stands still for default value(driving). Any idea ?

  7. Ranjith Kumar on September 19, 2013 at 1:05 pm

    Good tutorial dude I will give a try.

  8. Chris on November 3, 2013 at 11:50 pm

    Life saver!

    Thank you so much!

  9. Raghavendran on November 19, 2013 at 7:55 pm

    sir, I want to know if we mentioned alternatives = true in JSON web service how to get that into our app

  10. mr jo on February 19, 2014 at 3:15 pm

    Why you use FragmentActivity instead of Activity ?

  11. BALENDER KUMAR on April 4, 2014 at 4:37 am

    how we can add time also with that (Route directions for driving mode, bicycling and walking mode)can anyone help me

  12. Jayaraman on December 12, 2014 at 11:28 am

    your tutorial is working, but did not display map. showing blank screen with zoom in(+) and zoom out(-) symbols. can anyone help me.

    • Maimoona Ali on February 9, 2015 at 12:40 pm

      You might have not placed the API key properly

  13. Lucas on December 20, 2014 at 5:58 am

    Hi, I have problems in “getMenuInflater().inflate(R.menu.main, menu);”, I import android.view.Menu, and don’t work, what’s the problem ?

  14. DThang on April 17, 2015 at 12:31 pm

    hello,
    can y introduce get information of bus.
    thanks

  15. Attaullah on June 14, 2015 at 6:05 pm

    it not work only map show on mobile screen even when i tap on radio still no changes…
    so what i do…

  16. rwa on October 7, 2015 at 4:19 am

    Hi, I have problems in the value the local variable markerOption is not used and list raw type references to generic type,can anyone help me

  17. Philanni on June 27, 2016 at 4:26 am

    Nice Tutorial, i like the coments, I will try it now and update again,

Leave a Reply

Your email address will not be published. Required fields are marked *

Be friend at g+

Subscribe for Lastest Updates

FBFPowered by ®Google Feedburner