0

Following is my code:

public class DetailDescription extends FragmentActivity implements LocationListener{
    private static String TAG="DetailDescription";
    GoogleMap mGoogleMap;
    ArrayList<LatLng> mMarkerPoints;
    double mLatitude=0;
    double mLongitude=0;
    private final static int DETAILS_TRUE=1;
    private final static int DETAILS_FALSE=2;
    private final static int DETAILS_ERROR=3;int position;
    ConnectionDetector cd;GPSTracker gps;Boolean isInternetPresent = false;

    protected void onCreate(Bundle savedInstanceState) {
        cd = new ConnectionDetector(getApplicationContext());


        ImageView imageview;
        // TODO Auto-generated method stub

        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
        isInternetPresent = cd.isConnectingToInternet();
        if (isInternetPresent) {            
        setContentView(R.layout.detaildescription);
        }
        else
        {
            // Internet connection is not present
            // Ask user to connect to Internet
            showAlertDialog(DetailDescription.this, "No Internet Connection",
                    "You don't have internet connection.", false);

        }
        getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.header);
        position=getIntent().getIntExtra("position", 0);
        SharedData.pos1=position;
        TextView txtHeader=(TextView)findViewById(R.id.txtHeader);
        txtHeader.setText(SharedData.mAtm[position].name);
        TextView adress=(TextView)findViewById(R.id.adress);
        adress.setText(SharedData.mAtm[position].address);
        Button btnBack=(Button)findViewById(R.id.btnBack);
        btnBack.setVisibility(View.VISIBLE);
        btnBack.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

                Intent i=new Intent(DetailDescription.this,PlacesList.class);
                //i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK);
                startActivity(i);
                finish();
            }
        });

        ImageButton btnNext=(ImageButton)findViewById(R.id.btnNext);
        btnNext.setVisibility(View.VISIBLE);
        btnNext.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Intent i=new Intent(DetailDescription.this,PlaceFinder.class);
                //i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK);
                startActivity(i);
                finish();
            }
        });

        locationn();
    }

    public void showAlertDialog(Context context, String title, String message, Boolean status) {
        AlertDialog alertDialog = new AlertDialog.Builder(context).create();

        // Setting Dialog Title
        alertDialog.setTitle(title);

        // Setting Dialog Message
        alertDialog.setMessage(message);

        // Setting alert dialog icon
        alertDialog.setIcon((status) ? R.drawable.ic_launcher: R.drawable.fail);

        // Setting OK Button
        alertDialog.setButton("OK", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
            }
        });

        // Showing Alert Message
        alertDialog.show();
    }


    private void locationn() {
        // Getting Google Play availability status
                int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(getBaseContext());

                if(status!=ConnectionResult.SUCCESS){ // Google Play Services are not available

                    int requestCode = 10;
                    Dialog dialog = GooglePlayServicesUtil.getErrorDialog(status, this, requestCode);
                    dialog.show();

                }else { // Google Play Services are available

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

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

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

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


                    // Getting LocationManager object from System Service LOCATION_SERVICE
                    LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);

                    // Creating a criteria object to retrieve provider
                    Criteria criteria = new Criteria();

                    // Getting the name of the best provider
                    String provider = locationManager.getBestProvider(criteria, true);

                    // Getting Current Location From GPS
                    Location location = locationManager.getLastKnownLocation(provider);

                    if(location!=null){
                        onLocationChanged(location);
                    }
                    else
                    {
                        Toast.makeText(DetailDescription.this, "Location can't be retrieved", 5000).show();
                    }

                    locationManager.requestLocationUpdates(provider, 20000, 0, this);           


                    LatLng startPoint = new LatLng(mLatitude, mLongitude);
                    drawMarker(startPoint);


                    LatLng origin = mMarkerPoints.get(0);
                    LatLng dest = new LatLng(SharedData.mAtm[SharedData.pos1].lat, SharedData.mAtm[SharedData.pos1].lon);

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

                    DownloadTask downloadTask = new DownloadTask();
                    Marker marker= mGoogleMap.addMarker(new MarkerOptions().position(dest).title(SharedData.mAtm[position].address).icon(BitmapDescriptorFactory.fromResource(R.drawable.marker1)));
                    marker.showInfoWindow();

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

                }       
        // TODO Auto-generated method stub

    }

    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="+SharedData.mAtm[SharedData.pos1].lat+","+SharedData.mAtm[SharedData.pos1].lon;         

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

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

        // 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;
    }



    /** A class to download data from Google Directions URL */
    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 Directions 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;

            // 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);
                lineOptions.color(Color.RED);
            }

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


    private void drawMarker(LatLng point){
        mMarkerPoints.add(point);

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

        // Setting the position of the marker
        options.position(point);

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

        // Add new marker to the Google Map Android API V2
        mGoogleMap.addMarker(options);      
    }

    @Override
    public void onLocationChanged(Location location) {
        // Draw the marker, if destination location is not set
        if(mMarkerPoints.size() < 2){

            mLatitude = location.getLatitude();
            mLongitude = location.getLongitude();
            LatLng point = new LatLng(mLatitude, mLongitude);

            mGoogleMap.moveCamera(CameraUpdateFactory.newLatLng(point));
            mGoogleMap.animateCamera(CameraUpdateFactory.zoomTo(15));        

            drawMarker(point);          
        }
    }

    @Override
    public void onProviderDisabled(String provider) {
        // TODO Auto-generated method stub      
    }

    @Override
    public void onProviderEnabled(String provider) {
        // TODO Auto-generated method stub      
    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
        // TODO Auto-generated method stub      
    }   
}
Cœur
  • 37,241
  • 25
  • 195
  • 267
Rajasekhar
  • 2,345
  • 1
  • 13
  • 20
  • 1
    Too much code: please reduce it to an [MCVE](https://stackoverflow.com/help/mcve). And please provide the error messages. – Cœur Jan 02 '18 at 07:46

1 Answers1

1

Change your condition flow this way,

public class DetailDescription extends FragmentActivity implements LocationListener
{
    private static String TAG="DetailDescription";
    GoogleMap mGoogleMap;
    ArrayList<LatLng> mMarkerPoints;
    double mLatitude=0;
    double mLongitude=0;
    private final static int DETAILS_TRUE=1;
    private final static int DETAILS_FALSE=2;
    private final static int DETAILS_ERROR=3;int position;
    ConnectionDetector cd;GPSTracker gps;Boolean isInternetPresent = false;

    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        cd = new ConnectionDetector(getApplicationContext());
        ImageView imageview;
        requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
        isInternetPresent = cd.isConnectingToInternet();
        if ( !isInternetPresent) 
        {            
            showAlertDialog(DetailDescription.this, "No Internet Connection",
                    "You don't have internet connection.", false);
        }
        else
        {
            setContentView(R.layout.detaildescription);
            getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.header);
            position=getIntent().getIntExtra("position", 0);
            SharedData.pos1=position;
            TextView txtHeader=(TextView)findViewById(R.id.txtHeader);
            txtHeader.setText(SharedData.mAtm[position].name);
            TextView adress=(TextView)findViewById(R.id.adress);
            adress.setText(SharedData.mAtm[position].address);
            Button btnBack=(Button)findViewById(R.id.btnBack);
            btnBack.setVisibility(View.VISIBLE);
            btnBack.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub

                    Intent i=new Intent(DetailDescription.this,PlacesList.class);
                    //i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK);
                    startActivity(i);
                    finish();
                }
            });

            ImageButton btnNext=(ImageButton)findViewById(R.id.btnNext);
            btnNext.setVisibility(View.VISIBLE);
            btnNext.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    Intent i=new Intent(DetailDescription.this,PlaceFinder.class);
                    //i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK);
                    startActivity(i);
                    finish();
                }
            });

            locationn();
        }
    }

    public void showAlertDialog(Context context, String title, String message, Boolean status) {
        AlertDialog alertDialog = new AlertDialog.Builder(context).create();

        // Setting Dialog Title
        alertDialog.setTitle(title);

        // Setting Dialog Message
        alertDialog.setMessage(message);

        // Setting alert dialog icon
        alertDialog.setIcon((status) ? R.drawable.ic_launcher: R.drawable.fail);

        // Setting OK Button
        alertDialog.setButton("OK", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
            }
        });

        // Showing Alert Message
        alertDialog.show();
    }


    private void locationn() {
        // Getting Google Play availability status
                int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(getBaseContext());

                if(status!=ConnectionResult.SUCCESS){ // Google Play Services are not available

                    int requestCode = 10;
                    Dialog dialog = GooglePlayServicesUtil.getErrorDialog(status, this, requestCode);
                    dialog.show();

                }else { // Google Play Services are available

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

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

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

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


                    // Getting LocationManager object from System Service LOCATION_SERVICE
                    LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);

                    // Creating a criteria object to retrieve provider
                    Criteria criteria = new Criteria();

                    // Getting the name of the best provider
                    String provider = locationManager.getBestProvider(criteria, true);

                    // Getting Current Location From GPS
                    Location location = locationManager.getLastKnownLocation(provider);

                    if(location!=null){
                        onLocationChanged(location);
                    }
                    else
                    {
                        Toast.makeText(DetailDescription.this, "Location can't be retrieved", 5000).show();
                    }

                    locationManager.requestLocationUpdates(provider, 20000, 0, this);           


                    LatLng startPoint = new LatLng(mLatitude, mLongitude);
                    drawMarker(startPoint);


                    LatLng origin = mMarkerPoints.get(0);
                    LatLng dest = new LatLng(SharedData.mAtm[SharedData.pos1].lat, SharedData.mAtm[SharedData.pos1].lon);

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

                    DownloadTask downloadTask = new DownloadTask();
                    Marker marker= mGoogleMap.addMarker(new MarkerOptions().position(dest).title(SharedData.mAtm[position].address).icon(BitmapDescriptorFactory.fromResource(R.drawable.marker1)));
                    marker.showInfoWindow();

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

                }       
        // TODO Auto-generated method stub

    }

    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="+SharedData.mAtm[SharedData.pos1].lat+","+SharedData.mAtm[SharedData.pos1].lon;         

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

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

        // 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;
    }



    /** A class to download data from Google Directions URL */
    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 Directions 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;

            // 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);
                lineOptions.color(Color.RED);   

            }

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


    private void drawMarker(LatLng point){
        mMarkerPoints.add(point);

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

        // Setting the position of the marker
        options.position(point);

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

        // Add new marker to the Google Map Android API V2
        mGoogleMap.addMarker(options);      
    }

    @Override
    public void onLocationChanged(Location location) {
        // Draw the marker, if destination location is not set
        if(mMarkerPoints.size() < 2){

            mLatitude = location.getLatitude();
            mLongitude = location.getLongitude();
            LatLng point = new LatLng(mLatitude, mLongitude);

            mGoogleMap.moveCamera(CameraUpdateFactory.newLatLng(point));
            mGoogleMap.animateCamera(CameraUpdateFactory.zoomTo(15));        

            drawMarker(point);          
        } 

    }

    @Override
    public void onProviderDisabled(String provider) {
        // TODO Auto-generated method stub      
    }

    @Override
    public void onProviderEnabled(String provider) {
        // TODO Auto-generated method stub      
    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
        // TODO Auto-generated method stub      
    }   
}
Lucifer
  • 29,392
  • 25
  • 90
  • 143
  • Thank you very much Kedarnath...for Internet is working but how to gps enabled programatically ..where we need to implement – Rajasekhar Mar 28 '14 at 04:30
  • @Rajasekhar , you can only check if GPS is enabled or not, but you can not programmatically enable the GPS, Since Android 3.0 the security glitch is removed by android developers. You can check my answer [here](http://stackoverflow.com/a/22529296/3330969) – Lucifer Mar 28 '14 at 04:38
  • @Rajasekhar, since you are new to the site, let me guide you about "accept answers" You should tick the green mark ( which is besides the answer ) for the answer which solve your problem. :) – Lucifer Mar 28 '14 at 04:56
  • @Rajasekhar, No problem, Starting GPS programmatically is no longer supported, You can read it in my linked answer. – Lucifer Mar 28 '14 at 05:25