Получение обновленного местоположения в Android - PullRequest
0 голосов
/ 16 июня 2010

Я использую код, показанный ниже, чтобы получать обновленное значение для местоположения при каждом нажатии кнопки.Когда моя деятельность возобновляется, я получаю обновление каждую секунду, поэтому при вызове getLastKnownLocation я ожидаю, что у меня будет местоположение, которое было обновлено в последнюю секунду.

Это правильный способ сделать это?

Я ожидаю, что событие onLocationChanged будет запускаться каждый раз, когда я выполняю команду 'geo fix' (или максимум через 1 с, так как я запрашиваю обновление каждые 1 с), но оно запускается только в первый раз.Почему?

Любая помощь / предложение приветствуется!

Спасибо

package org.digitalfarm.atable;

...

public class Atable extends Activity {
    private Button mSearchButton;
    private TextView mytext;
    private LocationManager locationManager;    


    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);   

        setContentView(R.layout.main);

        mSearchButton = (Button)this.findViewById(R.id.button);

        mytext = (TextView) findViewById(R.id.dude);

        locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
        final Criteria criteria = new Criteria();
        criteria.setAccuracy(Criteria.ACCURACY_FINE);               


        mSearchButton.setOnClickListener(new OnClickListener() {
          @Override
          public void onClick(View v) {

                  String provider = locationManager.getBestProvider(criteria, true);

                  Location location = locationManager.getLastKnownLocation(provider);             

          }
        });
    }

     //Start a location listener
    LocationListener onLocationChange=new LocationListener() {
        public void onLocationChanged(Location loc) {
            //sets and displays the lat/long when a location is provided
            String latlong = "Lat: " + loc.getLatitude() + " Long: " + loc.getLongitude();   
            mytext.setText(latlong);
        }

        public void onProviderDisabled(String provider) {
        // required for interface, not used
        }

        public void onProviderEnabled(String provider) {
        // required for interface, not used
        }

        public void onStatusChanged(String provider, int status,
        Bundle extras) {
        // required for interface, not used
        }
    };

    //pauses listener while app is inactive
    @Override
    public void onPause() {
        super.onPause();
        locationManager.removeUpdates(onLocationChange);
    }

    //reactivates listener when app is resumed
    @Override
    public void onResume() {
        super.onResume();
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,1000,100.0f,onLocationChange);
    }
}

1 Ответ

0 голосов
/ 16 июня 2010

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

Из документации:

minTime - минимальный интервал времени для уведомлений в миллисекундах. Это поле используется только в качестве подсказки для экономии энергии, и фактическое время между обновлениями местоположения может быть больше или меньше , чем это значение.

Попробуйте установить этот интервал времени на 0, и если других проблем нет (хотя мне все это кажется нормальным), вы должны начать получать обновления "как можно чаще".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...