Android - определение местоположения по сети GPS за короткий промежуток времени (максимум 10 секунд) - PullRequest
2 голосов
/ 22 декабря 2011

Я пытаюсь настроить быстрый и грязный поиск GPS через LocationManager, который выбирает сетевое местоположение (в пределах 500 метров) каждые полсекунды в течение десяти секунд.Другими словами, я просто пытаюсь найти правильные грубые настройки критериев и правильную логику, чтобы прекратить проверять через 10 секунд не лучшие места в моем потоке обработчика.

Я думаю, что мой основной цикл должен выглядетьчто-то вроде этого:

/**
 * Iteration step time.
 */
private static final int ITERATION_TIMEOUT_STEP = 500; //half-sec intervals
public void run(){
    boolean stop = false;
    counts++;
    if(DEBUG){
        Log.d(TAG, "counts=" + counts);
    }

    //if timeout (10 secs) exceeded, stop tying
    if(counts > 20){ 
        stop = true;
    }

    //location from my listener
    if(bestLocation != null){
       //remove all network and handler callbacks
    } else {
       if(!stop){
          handler.postDelayed(this, ITERATION_TIMEOUT_STEP);
       } else {
          //remove callbacks
       }
    }
}

Что я хочу знать, так это то, что после того, как я выбрал последнее известное местоположение в качестве моего первоначального лучшего местоположения и начал свою цепочку, как мне установить грубые критерии, чтобы я получилболее точный, чем исходный (для сравнения двух по свежести), который обычно диаметрально отличается от моего текущего местоположения?

1 Ответ

2 голосов
/ 22 декабря 2011

Хорошо, что вы ищете, чтобы спросить устройство для лучших критериев для получения грубого местоположения.

Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_COARSE);  // Faster, no GPS fix.
String provider = locationManager.getBestProvider(criteria, true); // only retrieve enabled providers.

Затем просто зарегистрируйте слушателя

locationManager.requestLocationUpdates(provider, ITERATION_TIMEOUT_STEP, MIN_LOCATION_UPDATE_DISTANCE, listener); //listener just implements android.location.LocationListener

в слушателе, вы получите обновление как таковое

 void onLocationChanged(Location location) {
     accuracy = location.getAccuracy(); //accuracy of the fix in meters
     timestamp = location.getTime(); //basically what you get from System.currentTimeMillis()
 }

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

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

...