2015-07-26 7 views
0

В настоящее время я создаю приложение для карт Android, где я хочу, чтобы пользователь мог отслеживать свой маршрут. Таким образом, в основном они будут нажимать кнопку запуска, а затем будет обнаружено их текущее местоположение, и по мере их начала полилиния будет динамически отображаться.requestLocationUpdates не происходит автоматически

В данный момент я еще не нарисовал полилинию, но я могу продолжать обнаруживать обновленное текущее местоположение с помощью макетов. Однако, чтобы получить обновление, я должен продолжать нажимать кнопку запуска. Есть ли способ, чтобы маркеры отображались самостоятельно, без необходимости вручную нажать кнопку «Пуск»?

Вот мои коды

btnStart по щелчку

btnStart = (Button) findViewById(R.id.btnStart); 
    btnStart.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      // getting current location 
      MyLocationListener myLocListener = new MyLocationListener(); 

      LocationManager locManager; 
      String context = Context.LOCATION_SERVICE; 
      locManager = (LocationManager) getSystemService(context); 

      Criteria c = new Criteria(); 
      c.setAccuracy(Criteria.ACCURACY_FINE); 
      c.setAltitudeRequired(false); 
      c.setBearingRequired(false); 
      c.setCostAllowed(true); 
      c.setPowerRequirement(Criteria.POWER_LOW); 

      String provider = locManager.getBestProvider(c, true); 
      Location loc = locManager.getLastKnownLocation(provider); 

      locManager.requestLocationUpdates(provider, 50, 10, myLocListener); 

      LatLng currentPosition = updateWithNewLocation(loc); 
      // getting current location - end 


      // setting a marker at the curretnt location (start of polyline) 
      Marker startLocation = mMap.addMarker(new MarkerOptions() 
        .position(currentPosition) 
        .title("Start Location") 
        .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE))); 

      mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(currentPosition, 17)); 

     } 
    }); 

метод updateWithNewLocation

private LatLng updateWithNewLocation(Location loc) { 
    String latLonString; 
    LatLng currentLocation = null; 
    if (loc != null) { 
     double lat = loc.getLatitude(); 
     double lon = loc.getLongitude(); 

     currentLocation = new LatLng(lat, lon); 

    } else { 
     latLonString = "No location found"; 
    } 

    return currentLocation; 
} 

последний, но не менее, мой LocationListener

private final LocationListener locListener = new LocationListener() { 
    @Override 
    public void onLocationChanged(Location location) { 
     updateWithNewLocation(location); 
    } 

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

    } 

    @Override 
    public void onProviderEnabled(String provider) { 

    } 

    @Override 
    public void onProviderDisabled(String provider) { 

    } 
}; 

ответ

0

Не можете найти ниже?

locManager.requestLocationUpdates(provider, 50, 10, myLocListener); 

в

locManager.requestLocationUpdates(provider, 0, 0, myLocListener); 

Поскольку вы запрашиваете 50 метров минимума до расположения самого обновления с помощью Location Manager,.

Подробнее о Location Manager.

Надеюсь, это поможет вам.

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