У меня есть проблема с получением текущего местоположения, потому что у меня есть в моем MainActivity слушателя:получить текущее местоположение андроида
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER,
MINIMUM_TIME_BETWEEN_UPDATE,
MINIMUM_DISTANCECHANGE_FOR_UPDATE,
new MyLocationListener()
);
И у меня есть вторая активность, где я, когда я нажимаю на кнопку, рассчитать расстояние от моего местоположения и GPS координаты, я буду проходить с distanceTo
и возвращает истину, если расстояние Разногласия между 0 и 200. Поэтому у меня есть функция в SecondActivity
private boolean checkCoordinate(String gps) {
LocationManager lm = (LocationManager) getSystemService(App.getContext().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) {
return false;
}
Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
double currentLongitude = location.getLongitude();
double currentLatitude = location.getLatitude();
Location loc1 = new Location("");
loc1.setLatitude(currentLatitude);
loc1.setLongitude(currentLongitude);
String[] sep = gps.split(",");
double latitude = Double.parseDouble(sep[0]);
double longitude = Double.parseDouble(sep[1]);
Location loc2 = new Location("");
loc2.setLatitude(latitude);
loc2.setLongitude(longitude);
float distanceInMeters = loc1.distanceTo(loc2);
if(distanceInMeters < 200){
return true;
}else{
return false;
}
}
Но проблема в том, что иногда и может быть, когда я не изменяю мое местоположение функции:
Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
возвращения нуля, и я не понимаю, как знать мое текущее местоположение, потому что я уже установлен requestLocationUpdates. , так что я могу узнать свое текущее местоположение?
Да, я понял, что проблема заключается не в провайдере GPS-провайдера, и на данный момент я «временно решил» с помощью 'if (location == null) {location = lm.getLastKnownLocation (LocationManager.NETWORK_PROVIDER); } '. Но я не знаю, была ли плохая практика или если могла возникнуть проблема, но кажется, что работа даже в месте с меньшей точностью – LorenzoBerti
, хотя это происходит гораздо реже, сетевое местоположение также может отсутствовать. –
Хорошо, спасибо, поэтому я использовал 'requestSingleUpdate' вместо' requestLocationUpdates' или использовал 'requestSingleUpdate' в моей функции' checkCoordinate' – LorenzoBerti