2016-08-24 5 views
0

У меня есть проблема с получением текущего местоположения, потому что у меня есть в моем 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. , так что я могу узнать свое текущее местоположение?

ответ

1

getLastKnownLocation вернет null, если GPS-местоположение отключено в системе или не было исправления GPS с момента запуска системы. Если вы хотите убедиться, что есть место, вы можете использовать метод requestSingleUpdate, он не вернется, пока не будет доступного местоположения.

Возможно, было бы неплохо не использовать API-интерфейсы на основе определенного имени поставщика, если не важно использовать конкретного поставщика (как правило, не важно, как вы получили это местоположение). API содержит методы, которые принимают Criteria -объект вместо имени поставщика, и вы можете точно определить, какой уровень точности и т. Д. Вы хотите.

+0

Да, я понял, что проблема заключается не в провайдере GPS-провайдера, и на данный момент я «временно решил» с помощью 'if (location == null) {location = lm.getLastKnownLocation (LocationManager.NETWORK_PROVIDER); } '. Но я не знаю, была ли плохая практика или если могла возникнуть проблема, но кажется, что работа даже в месте с меньшей точностью – LorenzoBerti

+1

, хотя это происходит гораздо реже, сетевое местоположение также может отсутствовать. –

+0

Хорошо, спасибо, поэтому я использовал 'requestSingleUpdate' вместо' requestLocationUpdates' или использовал 'requestSingleUpdate' в моей функции' checkCoordinate' – LorenzoBerti

Смежные вопросы