AndreaF
AndreaF

Reputation: 12385

Cannot get current location coordinates

I want to get current longitude and latitude as int

So I use this code

        locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0,
                0, this);

        Location location = locationManager
                .getLastKnownLocation(LocationManager.GPS_PROVIDER);


        try {
            gps_enabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
        } catch (Exception ex) {
        }
        try {
            network_enabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
        } catch (Exception ex) {
        }

        // don't start listeners if no provider is enabled
        if (!gps_enabled && !network_enabled) {
               ....Notify
        }

        if (gps_enabled) {
            if (location != null) {
                 longitude =(int) (location.getLongitude()*1e6);
                 latitude = (int) (location.getLatitude()*1e6);
String accuracy = "Accuracy: " + location.getAccuracy();
            } 
        }
        if (network_enabled) {
            if (location != null) {

                 longitude =(int) (location.getLongitude()*1e6);
                 latitude = (int) (location.getLatitude()*1e6);
                String accuracy = "Accuracy: " + location.getAccuracy();
            } 
            }

        locationManager.removeUpdates(this);

Unfortunately longitude and latitude are always null.

I have all permission needed in the manifest.

How can I fix this issue?

Upvotes: 2

Views: 1315

Answers (4)

Nathiya
Nathiya

Reputation: 88

Try This code

        double longitude,latitude;
         int lon,lat;

       getcurrentloc.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
             if(!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){
                Toast.makeText(GpsLocationFinder.this, "Enable Your GPS", Toast.LENGTH_LONG).show();
            }else{
            LocationResult locationResult=new LocationResult() {    
                @Override
                public void gotLocation(Location location) {
                    // TODO Auto-generated method stub


                        longitude=location.getLongitude();
                        latitude=location.getLatitude();
                         lon=(int)longitude;    
                         lat=(int)latitude;
                        Toast.makeText(GpsLocationFinder.this, "Current Longitude"+longitude+" Current Latitude"+latitude,Toast.LENGTH_LONG).show();

                }

            };      
            MyLocation myLocation = new MyLocation();
            myLocation.getLocation(GpsLocationFinder.this, locationResult);         


            }   

        }
    });

And the MyLocation Class is Below

     public class MyLocation {
Timer timer1;
LocationManager lm;
LocationResult locationResult;
boolean gps_enabled=false;
boolean network_enabled=false;
double longitude,latitude;

public boolean getLocation(Context context, LocationResult result)
{
    //I use LocationResult callback class to pass location value from MyLocation to user code.


        //Log.e("GPS DISTANCE","GPS Enabled");
    locationResult=result;
    if(lm==null)
        lm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);

    //exceptions will be thrown if provider is not permitted.

    //don't start listeners if no provider is enabled

        //try{

        try{

            gps_enabled=lm.isProviderEnabled(LocationManager.GPS_PROVIDER);

            }catch(Exception ex){

            }
        try{
            network_enabled=lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
        }catch(Exception ex){

        }
        if(!gps_enabled && !network_enabled){
            return false;
        }

    if(gps_enabled){

        lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 100, 100, locationListenerGps);
    }
    if(network_enabled)
        lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListenerNetwork);
    timer1=new Timer();
    timer1.schedule(new GetLastLocation(), 30000);          
    return true;

}


LocationListener locationListenerGps = new LocationListener() {
    public void onLocationChanged(Location location) {
        timer1.cancel();
        locationResult.gotLocation(location);
        lm.removeUpdates(this);
        lm.removeUpdates(locationListenerNetwork);
    }
    public void onProviderDisabled(String provider) {}
    public void onProviderEnabled(String provider) {}
    public void onStatusChanged(String provider, int status, Bundle extras) {}
};

LocationListener locationListenerNetwork = new LocationListener() {
    public void onLocationChanged(Location location) {
        timer1.cancel();
        locationResult.gotLocation(location);
        lm.removeUpdates(this);
        lm.removeUpdates(locationListenerGps);
    }
    public void onProviderDisabled(String provider) {

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


class GetLastLocation extends TimerTask {
    @Override
    public void run() {
         lm.removeUpdates(locationListenerGps);
         lm.removeUpdates(locationListenerNetwork);

         Location net_loc=null, gps_loc=null;
         if(gps_enabled)
             gps_loc=lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
         if(network_enabled)
             net_loc=lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);

         //if there are both values use the latest one
         if(gps_loc!=null && net_loc!=null){
             if(gps_loc.getTime()>net_loc.getTime())
                 locationResult.gotLocation(gps_loc);
             else
                 locationResult.gotLocation(net_loc);
             return;
         }

         if(gps_loc!=null){
             locationResult.gotLocation(gps_loc);
             return;
         }
         if(net_loc!=null){
             locationResult.gotLocation(net_loc);
             return;
         }
         locationResult.gotLocation(null);
    }
}

public static abstract class LocationResult{
    public abstract void gotLocation(Location location);
}
  }

Upvotes: 0

Google
Google

Reputation: 2223

 public class SMS_Service extends Service {

private final String LOGTAG = "SMS_Service";

String latLongString;
String addressString;
double altitude;
int LAC;
int mcc = 0;
int mnc = 0;
String pn_no;
Altitude_Details ld = new Altitude_Details();

@Override
public IBinder onBind(Intent intent) {
    // TODO Auto-generated method stub
    return null;
}

@Override
public void onCreate() {
    // TODO Auto-generated method stub
    super.onCreate();
    Log.e(LOGTAG, "created");
}

@Override
public void onDestroy() {
    // TODO Auto-generated method stub
    super.onDestroy();
    Log.e(LOGTAG, "destroyed");
}

@Override
public void onStart(Intent intent, int startId) {
    // TODO Auto-generated method stub
    super.onStart(intent, startId);
    Log.e(LOGTAG, "started");

    SmsManager sms = SmsManager.getDefault();
    // get phone number from shared preference
    SharedPreferences default1 = getSharedPreferences("Device",
            MODE_WORLD_WRITEABLE);
    pn_no = default1.getString("Phone_NO", "");
    Log.e("phone_no in sms service", pn_no);

    String From = intent.getStringExtra("From");
    String Msg = intent.getStringExtra("Msg"); // get message from intent
    Log.e("ON start:", "" + From);
    Log.e("ON start:", "" + Msg);

    String number = From.substring(7, 11);
    Log.e("ON start: SUBSTRING", "" + number);

    // check msg for Location keyword match or not
    if (Msg.equals("LOCATION") && pn_no.equals(number)) {
        Log.e("location:", "Location found");

        TelephonyManager tel = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
        String networkOperator = tel.getNetworkOperator();

        // find MNC and MCC
        if (networkOperator != null) {
            mcc = Integer.parseInt(networkOperator.substring(0, 3));
            mnc = Integer.parseInt(networkOperator.substring(3));
            Log.e("MCC", "" + mcc);
            Log.e("MNC", "" + mnc);
        }

        // find LAC for GSM
        if (tel.getPhoneType() == TelephonyManager.PHONE_TYPE_GSM) {
            final GsmCellLocation location = (GsmCellLocation) tel
                    .getCellLocation();
            if (location != null) {
                LAC = location.getLac();
                Log.e("cell location", "LAC: " + location.getLac()
                        + " CID: " + location.getCid());
            }
        }

        LocationManager locationManager;
        String context = Context.LOCATION_SERVICE;
        locationManager = (LocationManager) getSystemService(context);
        String provider = LocationManager.GPS_PROVIDER;
        Location location = locationManager.getLastKnownLocation(provider);

        // update method return latest location
        updateWithNewLocation(location);

        // location change then listner called
        locationManager.requestLocationUpdates(provider, 2000, 10,
                locationListener);

        // send mcc,mnc,latitude,longitude,altitude,address,Link in message
        String Url = "http://itouchmap.com/latlong.html";

        sms.sendTextMessage(pn_no, null, "\nLocation:\n" + "MCC: " + mcc
                + "\nMNC: " + mnc + "\nLAC:" + LAC + latLongString
                + "\nAltitude:" + altitude + "feet"
                + "\nGo to Below site:\n" + Url, null, null);

        sms.sendTextMessage(pn_no, null, "\nAddress:\n" + addressString,
                null, null);

        // stop service automatically
        SMS_Service.this.stopSelf();
    }

    else {
        Log.e("loation:", "Location not found");
        SMS_Service.this.stopSelf();
    }
}

private final LocationListener locationListener = new LocationListener() {

    public void onLocationChanged(Location location) {
        updateWithNewLocation(location);

    }

    public void onProviderDisabled(String provider) {
        updateWithNewLocation(null);

    }

    public void onProviderEnabled(String provider) {
    }

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

private void updateWithNewLocation(Location location) {
    // TODO Auto-generated method stub

    addressString = "\nno address found";
    // check location get or not from provider
    if (location != null) {

        // get latitude and longitude
        double latitude = location.getLatitude();
        double longitude = location.getLongitude();

        latLongString = "\nLat:" + latitude + "\nLong:" + longitude;
        Log.e("location", "" + latLongString);

        // get altitude from method
        altitude = ld.getElevationFromGoogleMaps(latitude, longitude);
        Log.e("Altitude", "" + altitude);

        // find address from latitude and longitude
        Geocoder gc = new Geocoder(this, Locale.getDefault());

        try {
            List<Address> addresses = gc.getFromLocation(latitude,
                    longitude, 1);
            StringBuilder sb = new StringBuilder();
            if (addresses.size() > 0) {
                Address address = addresses.get(0);
                for (int i = 0; i <= address.getMaxAddressLineIndex(); i++)

                    sb.append(address.getAddressLine(i)).append("\n");
            }
            addressString = sb.toString();
            Log.e("Address", "" + addressString);
        } catch (IOException e) {
        }

    } else {
        latLongString = "\n No location found";
        Log.e("location", "" + latLongString);
           }
     }
}

hey you can make the service and use this code to get altitude and latitude and decode this using class

Upvotes: 0

Dharmendra
Dharmendra

Reputation: 33996

  1. First check the GPS enabled in your device.
  2. Check all the permissions included in the manifest
  3. You are fetching the last known location using the GPS provider so remove that line and fetch the location individually for both the provider(There should be possible that your GPS is not available at that time so you did not get the location and you are fetching the last known location using the GPS so it can be null and if location will be null then it will not goes inside the conditions like if(network_enabled) and if(gps_enabled).).

In short check the Last known location of GPS if it is null then try to get the location using the Location provider and use that location.

Upvotes: 0

Amit Hooda
Amit Hooda

Reputation: 2144

Well this is what i use for location listener

import android.content.Context;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;

public class LocationUtils implements LocationListener{

 Context context;
 private String provider;
 private LocationManager locationManager;
 private String latitude="no value";
 private String longitude="no value";
 public LocationUtils(Context context) {
     this.context=context;
     // Get the location manager
        locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
        // Define the criteria how to select the locatioin provider -> use
        // default
        latitude="no value";
        longitude="no value";
        Criteria criteria = new Criteria();
        provider = locationManager.getBestProvider(criteria, false);
        Location location = locationManager.getLastKnownLocation(provider);

        // Initialize the location fields
        if (location != null) {
            /*Toast.makeText(context, "Provider " + provider + " has been selected.",
                    Toast.LENGTH_SHORT).show();*/
         // System.out.println("Provider " + provider + " has been selected.");
          onLocationChanged(location);
        } else {
            /*Toast.makeText(context, "Location not available",
                    Toast.LENGTH_SHORT).show();*/
        }
 }


@Override
public void onLocationChanged(Location location) {
    double lat = (double) (location.getLatitude());
    double lng = (double) (location.getLongitude());
    latitude = lat + "";
    longitude = lng + "";
   /* Toast.makeText(context, " lat: "+lat +"  Long:"+lng,
            Toast.LENGTH_SHORT).show(); */  
}

@Override
public void onProviderDisabled(String provider) {
     //Toast.makeText(context, "Disabled provider " + provider,
        //        Toast.LENGTH_SHORT).show();       
}

@Override
public void onProviderEnabled(String provider) {
    //Toast.makeText(context, "Enabled new provider " + provider,
      //      Toast.LENGTH_SHORT).show();
}

@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
    // TODO Auto-generated method stub

}
public String getLatitude() {
    return latitude;
}

public String getLongitude() {
    return longitude;
}


}

Now in your activity u can get

 LocationUtils appLocationManager = new LocationUtils(getContext());
 String latitude = appLocationManager.getLatitude();
 String longitude = appLocationManager.getLongitude();

Also add

 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
in your manifest file

Upvotes: 1

Related Questions