(Android) Get latitude and longitude, always zero

I have an issue, I need to get the latitude and longitude of one specific moment like taking a picture. I get the Double values, the problem is that they're always 0. I receive no exceptions, and the coordinates are uploaded successfully to Firebase Database, but when I check them in the JSON, they are always zero (I took like 20 pictures).

This is my sections code of "location" stuffs and the uploading to Firebase Database.

My Main Activity is like this.

 public class MainActivity extends AppCompatActivity implements LocationListener

Global variables related to Location

 double latitude;
 double longitude;

This goes inside onCreate():

LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
String networkProvider = LocationManager.NETWORK_PROVIDER;
String gpsProvider = LocationManager.GPS_PROVIDER;
final Location location= new Location(networkProvider);
onLocationChanged(location);{
     latitude=location.getLatitude();
     longitude=location.getLongitude();
}



if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                return;
            }
 locationManager.requestLocationUpdates(gpsProvider, 5000, 10, this);

This goes in a button onClickListener(), also inside onCreate() method.

//Insert coordinates to JSON Firebase database...
   Coordinates coordinates = new Coordinates();
   coordinates.setLatitude(location.getLatitude());
   coordinates.setLongitude(location.getLongitude());
   testReference.push().setValue(coordinates);
   Toast.makeText(MainActivity.this, "Coordinates uploaded!", Toast.LENGTH_LONG).show();

Also I have these methods inside MainActivity:

@Override
    public void onLocationChanged(Location location) {

    }

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

    }

    @Override
    public void onProviderEnabled(String provider) {

    }

    @Override
    public void onProviderDisabled(String provider) {

    }

Upvotes: 0

Views: 684

Answers (1)

rafsanahmad007
rafsanahmad007

Reputation: 23881

Try this:

   locationManager = (LocationManager) getApplicationContext()
            .getSystemService(Context.LOCATION_SERVICE);


    Criteria locationCritera = new Criteria();
    String providerName = locationManager.getBestProvider(locationCritera,
            true);
    if(providerName!=null)
        location = locationManager.getLastKnownLocation(providerName);

    locationListener = new MyLocationListener();

    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0,
            0, locationListener);

and Implement Your Location Listener class:

private class MyLocationListener implements LocationListener {

public void onLocationChanged(Location loc) {

  if (loc != null) {
        location = loc; 
        latitude=location.getLatitude();
        longitude=location.getLongitude();
    }
}

public void onProviderDisabled(String provider) {

}

public void onProviderEnabled(String provider) {
}

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

}

check null value for getLastKnownLocation() method..

Upvotes: 1

Related Questions