Search code examples
javaandroidlocation

Both LocationListener and Fusedlocationproviderclient are returning null values


I am aware that this question has been asked and answered multiple times ago but none worked for me, my goal is to get user current location and then show a GoogleMaps Marker at the position but I am totally unable to this because both LocationListener and Fusedlocationproviderclient that I tried are returning null Values, here are some sample codes:

mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0,0,  mLocationListener);

...
private final android.location.LocationListener mLocationListener = new LocationListener() {
    @Override
    public void onLocationChanged(@NonNull Location location) {
        app.l("Fetched");
        currentLocation = location ;
// Null

    }

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

    }

    @Override
    public void onProviderEnabled(String provider) {

    }

    @Override
    public void onProviderDisabled(String provider) {

    }
};

------------another way----------------

fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this);
        fetchLocation();

private void fetchLocation() {
    if (ActivityCompat.checkSelfPermission(

                this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(
                this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_CODE);
        } else {

            LocationRequest mLocationRequest = LocationRequest.create();
            mLocationRequest.setInterval(60000);
            mLocationRequest.setFastestInterval(5000);
            mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);

            LocationCallback mLocationCallback = new LocationCallback() {
                @Override
                public void onLocationResult(LocationResult locationResult) {
                    if (locationResult == null) {
                        return;
                    }
                    for (Location location : locationResult.getLocations()) {
                        if (location != null) {
                            app.l("sth1");
                        }
                    }
                }
            };

            LocationServices.getFusedLocationProviderClient(this).requestLocationUpdates(mLocationRequest, mLocationCallback, null);
            LocationServices.getFusedLocationProviderClient(this).getLastLocation().addOnSuccessListener(new OnSuccessListener<Location>() {
                @Override
                public void onSuccess(Location location) {
                    if (location == null){
                        app.l("it's null");
                    }
                }
            });

        }

    }

P.S: I have provided and checked all required permissions


Solution

  • this is a simple solution:

    LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
                if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                    // TODO: Consider calling
                    //    ActivityCompat#requestPermissions
                    // here to request the missing permissions, and then overriding
                    //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
                    //                                          int[] grantResults)
                    // to handle the case where the user grants the permission. See the documentation
                    // for ActivityCompat#requestPermissions for more details.
                    return;
                }
                currentLocation = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
                if (currentLocation == null) {
                }
                if (currentLocation != null) {
    
                    }
        
                }