2013-07-19 2 views
2

Я хочу получить точное & точное текущее местоположение. Для этого я использовал метод определения местоположения requestLocationUpdates(), но для вызова метода onLocationChanged() потребуется столько времени. Поэтому я установил для этого таймер как 20 секунд. Я имею в виду, что метод onLocationChanged() не вызывается даже после 20 секунд, после чего я решил заняться последним известным местоположением. Здесь я столкнулся с проблемой. getLastKnownLocation() возврат null.android- Как обновить местоположение, не открывая карты/навигационное приложение

Но я хочу местоположение. Здесь я нашел одно решение для этого. Именно из-за тестирования устройство не имеет недавнего обновления местоположения с поставщиком gps. Поэтому нам нужно вручную открыть приложение «Карты/Навигация», после чего оно вернет местоположение. что нам нужно сделать для получения местоположения вместо открытия приложения «Карты». Я думаю, что мы должны сделать то же самое, что и приложение Maps для обновления местоположения. Как мы реализуем это, не открывая его.

// Получить текущее местоположение с помощью requestLocationUpdates

public void getLocation() { 

    locationManager.requestLocationUpdates(strProvider, 0, 0, 
      CurrentlocationListener); 

} 

LocationListener CurrentlocationListener = new LocationListener() { 
    @Override 
    public void onLocationChanged(Location location) { 
     // TODO Auto-generated method stub 
     if (location != null) { 

      locationManager.removeUpdates(this); 
      double lat = location.getLatitude(); 
      double lng = location.getLongitude(); 
      String strCurrentLatitude = String.valueOf(lat); 
      String strCurrentLongitude = String.valueOf(lng); 

      System.out 
         .println("Current Latitude and Longitude(onLocation Changed): " 
           + strCurrentLatitude 
           + "," 
           + strCurrentLongitude); 
     } 
    } 

    @Override 
    public void onProviderDisabled(String provider) {} 

    @Override 
    public void onProviderEnabled(String provider) {} 

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

// Получить текущее местоположение с помощью lastknownlocation.

String location_context = Context.LOCATION_SERVICE; 

    locationManager = (LocationManager) getSystemService(location_context); 
    Criteria crit = new Criteria(); 
    crit.setAccuracy(Criteria.ACCURACY_FINE); 
    strProvider = locationManager.getBestProvider(crit, true); 
    Location location = locationManager 
         .getLastKnownLocation(strProvider); 
       System.out.println("location(geoPoint1): " + location); 

       String strCurrentLatitude = "0", strCurrentLongitude = "0"; 

       if (location != null) { 
        strCurrentLatitude = String.valueOf(location 
          .getLatitude()); 
        strCurrentLongitude = String.valueOf(location 
          .getLongitude()); 
       } 
+0

Очевидный способ - сохранить координаты перед закрытием приложения и загрузить их после запуска. Посмотрите еще одно решение: http://stackoverflow.com/questions/9885871/emulate-a-broadcast-in-android – Vyacheslav

+0

@trololo: я хочу, чтобы текущее местоположение даже в первый раз открывалось в этом случае, в этом случае у нас нет координаты правые. Как мы можем найти место? – naresh

ответ

0

Все, что вы делаете в OnLocationChanged() правильно. Теперь замените код LocationManager на это. Это сработает.

LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); 
     if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { 

      // Creating a criteria object to retrieve provider 
      Criteria criteria = new Criteria(); 

      // Getting the name of the best provider 
      String provider = locationManager.getBestProvider(criteria, true); 

      // Getting Current Location 
      Location location = locationManager.getLastKnownLocation(provider); 

      if (location != null) { 
       onLocationChanged(location); 



      } 

      locationManager.requestLocationUpdates(provider, 1000, 0, this); 

     } 

Спасибо. :)

+0

Как мы можем назвать onLocationChanged (location)? В My я получаю эту ошибку. Метод onLocationChanged (Location) не определен для типа RB_UpcomingExits – naresh

+0

Я думаю, он будет давать вам значения lat lon непрерывно, после этого вы не получите null. Если это. Возможно, вам стоит отметить это как ответ. Благодарю. – TheLittleNaruto

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