LocationManager.requestLocationUpdates добавить или обновить?

Я смотрю на LocationManager, чтобы получить лучшее местоположение для периодического местоположения отчетов. Меня интересует метод LocationManager.requestLocationUpdates. Что произойдет, если я вызову этот метод несколько раз с разными minTime и minDistance без вызова removeUpdates? Добавит ли он новый запрос или просто обновит существующий?
Я пытаюсь это проверить, на данный момент это непросто. Ваш ответ будет оценен.


person sunghun    schedule 05.06.2013    source источник
comment
Спасибо ребята мне ответили.   -  person sunghun    schedule 05.06.2013


Ответы (3)


Он обновит существующий запрос.

person Ridcully    schedule 05.06.2013
comment
Довольно старый вопрос, но я прочитал его сегодня :) Нам не хватает некоторых источников! - person mithrop; 28.01.2015
comment
Источники действительно были бы хороши. Однако я могу подтвердить, что этот ответ правильный. - person scai; 27.06.2017

Вы можете зарегистрировать его несколько раз. см. мой код ниже.

package com.test.locationmanager;

import android.app.Activity;
import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.location.LocationProvider;
import android.os.Bundle;
import android.widget.TextView;

public class LocationManagerStatus extends Activity {

private LocationManager locationManager;
private TextView textView;
private final LocationListener gpsLocationListener =new LocationListener(){

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
        final String tvTxt = textView.getText().toString();
        switch (status) {
        case LocationProvider.AVAILABLE:
            textView.setText(tvTxt + "GPS available again\n");
            break;
        case LocationProvider.OUT_OF_SERVICE:
            textView.setText(tvTxt + "GPS out of service\n");
            break;
        case LocationProvider.TEMPORARILY_UNAVAILABLE:
            textView.setText(tvTxt + "GPS temporarily unavailable\n");
            break;
        }
    }

    @Override
    public void onProviderEnabled(String provider) {
        textView.setText(textView.getText().toString()
                + "GPS Provider Enabled\n");
    }

    @Override
    public void onProviderDisabled(String provider) {
        textView.setText(textView.getText().toString()
                + "GPS Provider Disabled\n");
    }

    @Override
    public void onLocationChanged(Location location) {
        locationManager.removeUpdates(networkLocationListener);
        textView.setText(textView.getText().toString()
                + "New GPS location: "
                + String.format("%9.6f", location.getLatitude()) + ", "
                + String.format("%9.6f", location.getLongitude()) + "\n");
    }
};
private final LocationListener networkLocationListener =
                                                    new LocationListener(){

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras){
        final String tvTxt = textView.getText().toString();
        switch (status) {
        case LocationProvider.AVAILABLE:
            textView.setText(tvTxt + "Network location available again\n");
            break;
        case LocationProvider.OUT_OF_SERVICE:
            textView.setText(tvTxt + "Network location out of service\n");
            break;
        case LocationProvider.TEMPORARILY_UNAVAILABLE:
            textView.setText(tvTxt
                    + "Network location temporarily unavailable\n");
            break;
        }
    }

    @Override
    public void onProviderEnabled(String provider) {
        textView.setText(textView.getText().toString()
                + "Network Provider Enabled\n");
    }

    @Override
    public void onProviderDisabled(String provider) {
        textView.setText(textView.getText().toString()
                + "Network Provider Disabled\n");
    }

    @Override
    public void onLocationChanged(Location location) {
        textView.setText(textView.getText().toString()
                + "New network location: "
                + String.format("%9.6f", location.getLatitude()) + ", "
                + String.format("%9.6f", location.getLongitude()) + "\n");
    }
};

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    textView = (TextView) findViewById(R.id.textview);
    locationManager = (LocationManager) 
            getSystemService(Context.LOCATION_SERVICE);
}

@Override
protected void onResume() {
    super.onResume();
    locationManager.requestLocationUpdates(
            LocationManager.NETWORK_PROVIDER, 5000, 0,
            networkLocationListener);
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
            3000, 0, gpsLocationListener);
}

@Override
protected void onPause() {
    super.onPause();
    locationManager.removeUpdates(networkLocationListener);
    locationManager.removeUpdates(gpsLocationListener);
}
}
person blganesh101    schedule 05.06.2013
comment
Этот код работает? Можете ли вы получить широту и долготу с помощью этого кода? - person Lazy Ninja; 05.06.2013
comment
вы тестировали в устройстве? Причина, по которой я спрашиваю, заключается в том, что я уже некоторое время пытаюсь найти рабочий пример LocationManager.GPS_PROVIDER. См. мой вопрос здесь stackoverflow.com/questions/15627956/< /а> - person Lazy Ninja; 05.06.2013
comment
Да.. это из живого проекта. - person blganesh101; 05.06.2013
comment
Я попробовал ваш код. Работает только сетевое расположение. Gps не идет. @blganesh101 - person Lazy Ninja; 05.06.2013
comment
У меня работает... на каком телефоне вы это пробовали? включите / выключите GPS, и вы увидите, что обратные вызовы провайдера GPS вызываются. и когда местоположения заблокируются, вы получите обновления GPS. - person blganesh101; 05.06.2013
comment
Спасибо @blganesh101. Ты прав. Мне пришлось выйти из здания, чтобы это сработало. Благодарность, - person Lazy Ninja; 05.06.2013

Используйте новый API для Android, они сделали его более точным. и потребляют меньше эффективности батареи.

person strike    schedule 05.06.2013