То, что вы сделали, правильно, но провайдер местоположения иногда возвращает ноль. Возможно, вам придется обращаться с этим правильно. Если вы хотите получить местоположение вручную, используйте LocationManager
.
Попробуйте этот фрагмент из моего кода (при этом я никогда не получаю нулевое значение, где я хочу местоположение, поскольку оно по крайней мере вернет последнее местоположение или правильно покажет пользователю сообщение об ошибке и способ ее решения .:
private void updateLocations(){
String str_latitude = "";
String str_longitude = "";
String provider = "";
locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
provider = LocationManager.GPS_PROVIDER;
} else if (locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
provider = LocationManager.NETWORK_PROVIDER;
}
if (!provider.equals("")) {
mFusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(MainActivity.this);
@SuppressLint("MissingPermission") Task locationResult = mFusedLocationProviderClient.getLastLocation();
locationResult.addOnCompleteListener(MainActivity.this, new OnCompleteListener() {
@Override
public void onComplete(@NonNull Task task) {
if (task.isSuccessful()) {
Location mLastKnownLocation = (Location) task.getResult();
if (mLastKnownLocation != null) {
str_longitude = String.valueOf(mLastKnownLocation.getLatitude());
str_latitude = String.valueOf(mLastKnownLocation.getLongitude());
Toast.makeText(context, "Lat: "+str_latitude + ", Long " + str_longitude, Toast.LENGTH_LONG).show();
}
if (str_latitude.equals("") || str_longitude.equals("")) {
Snackbar.make(coordinatorLayout, "Couldn't find location, please try again in a moment", Snackbar.LENGTH_LONG).show();
}
}
}
});
} else if (provider.equals("")) {
Snackbar snackbar = Snackbar.make(coordinatorLayout, "Seems like all providers of device are disabled", Snackbar.LENGTH_LONG);
snackbar.setAction("Enable", new View.OnClickListener() {
@Override
public void onClick(View v) {
//Takes user to gps enable settings.
Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(intent);
}
});
snackbar.show();
}
}});