I just updated my Location API to use FusedLocationProviderClient but I am having this issue, when I turn off and on the GPS, I am always getting null location:
You can use getLocationAvailability() method on your FusedLocationPrivedClient object and if it returns true then only use getLastLocation() method otherwise use requestLocationUpdates() method like this :
FusedLocationProviderClient fusedLocationProviderClient =
LocationServices.getFusedLocationProviderClient(InitActivity.this);
if (ActivityCompat.checkSelfPermission(this.getApplicationContext(),
android.Manifest.permission.ACCESS_FINE_LOCATION)
== PackageManager.PERMISSION_GRANTED) {
fusedLocationProviderClient.getLocationAvailability().addOnSuccessListener(new OnSuccessListener() {
@Override
public void onSuccess(LocationAvailability locationAvailability) {
Log.d(TAG, "onSuccess: locationAvailability.isLocationAvailable " + locationAvailability.isLocationAvailable());
if (locationAvailability.isLocationAvailable()) {
if (ActivityCompat.checkSelfPermission(InitActivity.this.getApplicationContext(),
android.Manifest.permission.ACCESS_FINE_LOCATION)
== PackageManager.PERMISSION_GRANTED) {
Task locationTask = fusedLocationProviderClient.getLastLocation();
locationTask.addOnCompleteListener(new OnCompleteListener() {
@Override
public void onComplete(@NonNull Task task) {
Location location = task.getResult();
}
});
} else {
requestLocationPermissions ();
}
} else {
fusedLocationProviderClient.requestLocationUpdates(locationRequest, pendingIntent);
}
}
});
} else {
requestLocationPermissions ();
}