1

I dont know how to writr the code to choose if possible the Network provider or if Network is not available then GPS provider. How can i change the code to get this. This is my first android application and i tried to do it but i wasn't successfull.

package com.example.googlemapslbs;

import java.util.List;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.widget.Toast;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import com.google.android.gms.maps.CameraUpdateFactory;
import android.location.Criteria;
import android.util.Log;

public class MainActivity extends Activity {
    GoogleMap Map;

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

        try {
            // Load map
            initilizeMap();
            } 
        catch (Exception e) {
            e.printStackTrace();
        }

    }


    private void initilizeMap() {
        if (Map == null) {
            Map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();

            // map type normal (other possible choices: hybrid, terrain, satellite)
            Map.setMapType(GoogleMap.MAP_TYPE_NORMAL);

           // enable my-location 
           Map.setMyLocationEnabled(true);
           LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);

           //
           Criteria criteria = new Criteria(); 
           String provider = locationManager.getBestProvider(criteria, true);

           //getting Current Location
           Location location = locationManager.getLastKnownLocation(provider);

           if(location == null){
               LocationListener locationListener = new LocationListener() {

                @Override
                public void onLocationChanged(Location location) {
                    double lat= location.getLatitude();
                    double lng = location.getLongitude();
                    LatLng ll = new LatLng(lat, lng);
                    Map.moveCamera(CameraUpdateFactory.newLatLngZoom(ll, 18));                    
                }
                @Override
                public void onProviderDisabled(String provider) {}
                @Override
                public void onProviderEnabled(String provider) {}
                @Override
                public void onStatusChanged(String provider, int status,
                        Bundle extras) {}
                };
             //Log.d("APpln", "well hello there >>"+location);

                //location updates - requestLocationUpdates(provider, minTime, minDistance, listener)
                locationManager.requestLocationUpdates(provider, 20000, 0, locationListener);

           }else{
               double lat= location.getLatitude();
               double lng = location.getLongitude();

               LatLng ll = new LatLng(lat, lng);

               //modify the map's camera - zoom 18
               Map.moveCamera(CameraUpdateFactory.newLatLngZoom(ll, 18));
           }


        // Define a listener that responds to location updates
           LocationListener locationListener = new LocationListener() {

               public void onLocationChanged(Location location) {

                 // Called when a new location is found by the network location provider.
                 makeUseOfNewLocation(location);
               }

               private void makeUseOfNewLocation(Location location) {
                   double lat = location.getLatitude();
            double lng = location.getLongitude();
                LatLng ll = new LatLng(lat, lng);
                Toast.makeText(getApplicationContext(), "Your Current Location \nLat: " + lat + "\nLng: " + lng, Toast.LENGTH_LONG).show();

            }

            public void onStatusChanged(String provider, int status, Bundle extras) {}

               public void onProviderEnabled(String provider) {}

               public void onProviderDisabled(String provider) {}
             };

             locationManager.requestLocationUpdates(locationManager.getBestProvider(criteria, true), 0, 0, locationListener);

            // check if map is created successfully or not
            if (Map == null) {
                Toast.makeText(getApplicationContext(),
                        "ups... can not create map", Toast.LENGTH_SHORT)
                        .show();
            }
        }
    }

    @Override
    protected void onResume() {
        super.onResume();
        initilizeMap();
    }

    }
bucek
  • 142
  • 2
  • 13
  • see this example here http://www.androidhive.info/2012/07/android-gps-location-manager-tutorial/ it just uses GPS but you can also use wireless similarily. – Rohan Kandwal Jan 22 '14 at 20:58
  • this answer suits you best http://stackoverflow.com/a/6280851/1979347 – Rohan Kandwal Jan 22 '14 at 21:01
  • @Rohan Kandwal thanks for your help, and as advised answer upvoted – bucek Jan 24 '14 at 17:29
  • It's not advised but should be followed. This will encourage others to answer on your question and motivate them since no one here is getting paid to help anyone. – Rohan Kandwal Jan 24 '14 at 17:31

1 Answers1

1

I just finished creating a sample project for understanding the usage of Location Services. I am just posting my code, feel free to use it for your need and understanding about the working of Location Services. This code will check for the best available location service provider and switch it on from settings if it off.

public class DSLVFragmentClicks extends Activity implements LocationListener {
private final int BESTAVAILABLEPROVIDERCODE = 1;
private final int BESTPROVIDERCODE = 2;
LocationManager locationManager;
String bestProvider;
String bestAvailableProvider;

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == BESTPROVIDERCODE) {
        if (requestCode != Activity.RESULT_OK || locationManager.isProviderEnabled(bestProvider)) {
            Toast.makeText(getActivity(), "Error! Location Service " + bestProvider + " not Enabled", Toast.LENGTH_LONG).show();

        } else {
            getLocation(bestProvider);
        }
    } else {
        if (requestCode != Activity.RESULT_OK || locationManager.isProviderEnabled(bestAvailableProvider)) {
            Toast.makeText(getActivity(), "Error! Location Service " + bestAvailableProvider + " not Enabled", Toast.LENGTH_LONG).show();

        } else {
            getLocation(bestAvailableProvider);
        }
    }
}

public void getLocation(String usedLocationService) {
    Toast.makeText(getActivity(), "getting Location", Toast.LENGTH_SHORT).show();
    long updateTime = 0;
    float updateDistance = 0;
    // finding the current location 
    locationManager.requestLocationUpdates(usedLocationService, updateTime, updateDistance, this);

}


@Override
public void onCreate(Bundle savedState) {
    super.onCreate(savedState);
    setContentView(R.layout.main);
    // set a Criteria specifying things you want from a particular Location Service
            Criteria criteria = new Criteria();
            criteria.setSpeedRequired(false);
            criteria.setAccuracy(Criteria.ACCURACY_FINE);
            criteria.setCostAllowed(true);
            criteria.setBearingAccuracy(Criteria.ACCURACY_HIGH);
            criteria.setAltitudeRequired(false);

            locationManager = (LocationManager) getActivity().getSystemService(Context.LOCATION_SERVICE);
            // finding best provider without fulfilling the criteria
            bestProvider = locationManager.getBestProvider(criteria, false);
            // finding best provider which fulfills the criteria
            bestAvailableProvider = locationManager.getBestProvider(criteria, true);
            String toastMessage = null;
            if (bestProvider == null) {
                toastMessage = "NO best Provider Found";
            } else if (bestAvailableProvider != null && bestAvailableProvider.equals(bestAvailableProvider)) {
                boolean enabled = locationManager.isProviderEnabled(bestAvailableProvider);
                if (!enabled) {
                    Toast.makeText(getActivity(), " Please enable " + bestAvailableProvider + " to find your location", Toast.LENGTH_LONG).show();
                    Intent mainIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                    startActivityForResult(mainIntent, BESTAVAILABLEPROVIDERCODE);
                } else {
                    getLocation(bestAvailableProvider);
                }
                toastMessage = bestAvailableProvider + " used for getting your current location";
            } else {
                boolean enabled = locationManager.isProviderEnabled(bestProvider);
                if (!enabled) {
                    Toast.makeText(getActivity(), " Please enable " + bestProvider + " to find your location", Toast.LENGTH_LONG).show();
                    Intent mainIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                    startActivityForResult(mainIntent, BESTPROVIDERCODE);
                } else {
                    getLocation(bestProvider);
                }
                toastMessage = bestProvider + " is used to get your current location";

            }
            Toast.makeText(getActivity(), toastMessage, Toast.LENGTH_LONG).show();
            return true;
        }
    });
}

@Override
public void onLocationChanged(Location location) {
    Log.d("Location Found", location.getLatitude() + " " + location.getLongitude());
    // getting the street address from longitute and latitude
    Geocoder geocoder = new Geocoder(getActivity(), Locale.getDefault());
    String addressString = "not found !!";
    try {
        List<Address> addressList = geocoder.getFromLocation(location.getLatitude(), location.getLongitude(), 1);
        StringBuilder stringBuilder = new StringBuilder();
        if (addressList.size() > 0) {
            Address address = addressList.get(0);
            for (int i = 0; i < address.getMaxAddressLineIndex(); i++) {
                stringBuilder.append(address.getAddressLine(i)).append("\n");
                stringBuilder.append(address.getLocality()).append("\n");
                stringBuilder.append(address.getPostalCode()).append("\n");
                stringBuilder.append(address.getCountryName()).append("\n");
            }

            addressString = stringBuilder.toString();
            locationManager.removeUpdates(this);
        }
    } catch (IOException e) {
        e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
    }
    Toast.makeText(getActivity(), " Your Location is " + addressString, Toast.LENGTH_LONG).show();
}

@Override
public void onStatusChanged(String s, int i, Bundle bundle) {
    //To change body of implemented methods use File | Settings | File Templates.
}

@Override
public void onProviderEnabled(String s) {
    //To change body of implemented methods use File | Settings | File Templates.
}

@Override
public void onProviderDisabled(String s) {
    //To change body of implemented methods use File | Settings | File Templates.
}
}

If you didn't understand any part of it then feel free to ask.

Rohan Kandwal
  • 9,112
  • 8
  • 74
  • 107