@OM1

Android: почему location manager постоянно обновляет позицию?

Привет, два схожих метода :

LocationListener locationListener = new LocationListener() {
            public void onLocationChanged(Location location) {
                // Called when a new location is found by the network location provider.
                //makeUseOfNewLocation(location);
                Toast.makeText(getApplicationContext(), "test:"+Double.toString(location.getLatitude()), Toast.LENGTH_SHORT).show();
            }

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

            public void onProviderEnabled(String provider) {}

            public void onProviderDisabled(String provider) {}
        };


        if ( Build.VERSION.SDK_INT >= 23 &&
                ContextCompat.checkSelfPermission( getBaseContext(), android.Manifest.permission.ACCESS_FINE_LOCATION ) != PackageManager.PERMISSION_GRANTED &&
                ContextCompat.checkSelfPermission( getBaseContext(), android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
        }

        LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
        locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
        locationManager.removeUpdates(locationListener);


private GoogleMap.OnMyLocationChangeListener myLocationChangeListener = new GoogleMap.OnMyLocationChangeListener() {
        @Override
        public void onMyLocationChange(Location location) {
            LatLng loc = new LatLng(location.getLatitude(), location.getLongitude());
            //mMarker = mMap.addMarker(new MarkerOptions().position(loc));
            Toast.makeText(getApplicationContext(), location.getLatitude()+" "+location.getLongitude(), Toast.LENGTH_SHORT).show();
            if(mMap != null){
                mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(loc, 16.0f));
            }
        }
    };




mMap.setOnMyLocationChangeListener(myLocationChangeListener);


Координаты определяются, onMyLocationChange работает как надо.
Но оба метода постоянно срабатывают, т.е. с заданным периодом, не понимаю от куда этот период взялся и как с этом работать?
К примеру - вызвать определение координат и обработать результат?
Спасибо!
  • Вопрос задан
  • 324 просмотра
Решения вопроса 1
@denis_vl
Программист. Админ. Да и от скуки - на все руки.
Я сам не до конца понял документацию, и поэтому объяснять достаточно сложно, но весь смысл тут:
requestLocationUpdates(long, float, android.locati...
А идея примерно такая:
Есть минимальная дистанция и минимальное время обновления.
Минимальное время обновления говорить о том, что данные будут обновляться НЕ ЧАЩЕ, чем это время. это сделано для экономии батареи.
Так же, данные не будут приходить, если позиция не изменилась в пределах минимальной дистанции. о если изменилась, то будут приходить не чаще чем "минимальное время".
А вот если везде нули, то там все сложнее. Обновления идут постоянно. И судя по всему, так часто, как отдает их провайдер.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы