Siddhpura Amit
Siddhpura Amit

Reputation: 15078

Android GPS is returning null location

I have written code in that if GPS is disabled it will be enabled by code and try to get Location from gps but I am getting a null value. Below is my code

   public void getValue() {
    LocationManager mlocManager = (LocationManager) MySettings.this.getSystemService(Context.LOCATION_SERVICE);
    boolean gpsEnabled = mlocManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
    System.out.println("GPS IS "+gpsEnabled);
    if (!gpsEnabled) {
        String provider = Settings.Secure.getString(getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);

        if (!provider.contains("gps")) { // if gps is disabled
            final Intent poke = new Intent();
            poke.setClassName("com.android.settings", "com.android.settings.widget.SettingsAppWidgetProvider");
            poke.addCategory(Intent.CATEGORY_ALTERNATIVE);
            poke.setData(Uri.parse("3"));
            sendBroadcast(poke);
        }
    }
    SimpleDateFormat sdfDate = new SimpleDateFormat("MM/dd/yyyy");
    try {
        getBatteryLevel();
        mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, MySettings.this);
        Location location = mlocManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
        mLocation = location;
        if (location != null) {
            lat = location.getLatitude();
            lon = location.getLongitude();
            address = getAddress();
            alt = location.getAltitude();
            if (meterFootFlag) {
                diameter = location.getAccuracy();
            } else
                diameter = location.getAccuracy() / 3.28084;
        } else {
            lat = 0.0;
            lon = 0.0;
            alt = 0.0;
        }

    } catch (Exception e) {
        lat = 0.0;
        lon = 0.0;
        alt = 0.0;
    }

Also I have added permission in manifest file

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

but I am getting a null value for the location.

Any ideas on how I can get the location?

Upvotes: 0

Views: 2646

Answers (5)

Samir
Samir

Reputation: 6605

Make sure to open Permissions through the Settings--> Applications-->YourApp-->permissions And another reason could be delay, it takes time to connect to network, somethimes more than a minute

Upvotes: 0

Ajay
Ajay

Reputation: 542

Your code is correct just wait until GPs get altitude from a satellite it may take mroe than 1 minute.

Upvotes: 2

Harshid Vasoya
Harshid Vasoya

Reputation: 5721

locationMangaer = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

        String provider = Settings.Secure.getString(getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
        if(!provider.contains("gps")){ //if gps is disabled
            final Intent poke = new Intent();
            poke.setClassName("com.android.settings", "com.android.settings.widget.SettingsAppWidgetProvider"); 
            poke.addCategory(Intent.CATEGORY_ALTERNATIVE);
            poke.setData(Uri.parse("3")); 
            sendBroadcast(poke);
        }

    locationListener = new MyLocationListener();
    locationMangaer.requestLocationUpdates(LocationManager.GPS_PROVIDER, 10, 10,
            locationListener);

Now make MyLocationListener class in same activity.

private class MyLocationListener implements LocationListener {
    @Override
    public void onLocationChanged(Location loc) {

            String longitude = "Longitude: " +loc.getLongitude();  
            String latitude = "Latitude: " +loc.getLatitude();

            /*----------to get City-Name from coordinates ------------- */
            String cityName=null;                 
            Geocoder gcd = new Geocoder(getBaseContext(), Locale.getDefault());                  
            List<Address>  addresses;  
            try {  
             addresses = gcd.getFromLocation(loc.getLatitude(), loc.getLongitude(), 1);  
             if (addresses.size() > 0) { 
              System.out.println(addresses.get(0).getLocality());  
             cityName=addresses.get(0).getLocality();  
                System.out.println("MESSAGE:"+cityName);
             }
            } catch (IOException e) {                 
             e.printStackTrace();  
            } 

            String s = longitude+"\n"+latitude+"\t city name:"+cityName;
                Log.v("OUTPUT, s);
    }

    @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          
    }
}

Run your application in Actual device.

you can figure out that automatic start GPS and see console logcat.

Upvotes: 0

G M Ramesh
G M Ramesh

Reputation: 3412

Make sure that you are checking on DEVICE only.. In Emulator it will give Null Values for GPS as it is running in the system so it doesnot have permission for GPS

Upvotes: 0

Pierry
Pierry

Reputation: 989

try:

    public Location showLocation(){
    LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    //Class model, save latitude and longitude
    NavegadorCoordenadas locate = new NavegadorCoordenadas();
    Criteria crit = new Criteria();
    crit.setAccuracy(Criteria.ACCURACY_FINE);
    String provider = lm.getBestProvider(crit, false);
    Location loc = getLastKnownLocation(lm);                    
    locate.setLatitude(loc.getLatitude()); 
    locate.setLongitude(loc.getLongitude());
    return loc;     
}

private Location getLastKnownLocation(LocationManager location) {
    List<String> providers = location.getProviders(true);
    Location bestLocation = null;
    for (String provider : providers) {
        Location l = location.getLastKnownLocation(provider);           
        if (l == null) {
            continue;
        }
        if (bestLocation == null || l.getAccuracy() < bestLocation.getAccuracy()) {             
            bestLocation = l;
        }
    }
    if (bestLocation == null) {
        return null;
    }
    return bestLocation;
}

Upvotes: 0

Related Questions