0

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?

Lance Roberts
  • 22,383
  • 32
  • 112
  • 130
Siddhpura Amit
  • 14,534
  • 16
  • 91
  • 150

5 Answers5

2

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

Ajay
  • 552
  • 2
  • 4
  • 16
0

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;
}
Pierry
  • 979
  • 7
  • 17
0

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

G M Ramesh
  • 3,420
  • 9
  • 37
  • 53
0
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.

Harshid
  • 5,701
  • 4
  • 37
  • 50
0

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

Samir
  • 6,405
  • 5
  • 39
  • 42