Android Locationprovider занимает слишком много времени, чтобы стать временно недоступным - PullRequest
4 голосов
/ 07 марта 2011

Согласно этой статье ( UPD: ссылка удалена, поскольку это приводит к некоторой чушь сейчас), установка minTime при запросе обновлений местоположения приведет к тому, что провайдер установит для себя TEMPORARILY_UNAVAILABLE minTime миллисекунд для экономии заряда батареи. В течение этого периода бездействия провайдер GPS отключится, а значок GPS исчезнет.

В моем коде я установил minTime примерно на 30 секунд, но провайдер становится TEMPORARILY_UNAVAILABLE только раз в пять минут. Когда это происходит, он остается только TEMPORARILY_UNAVAILABLE не более десяти секунд, прежде чем снова включится. Я знаю это, потому что значок GPS исчезает только на десять секунд, а затем снова появляется.

Я понимаю, что настройка minTime является лишь приблизительным ориентиром для провайдера местоположения Android ... но я уверен, что пять минут полностью отличаются от 30 секунд. Кто-нибудь знает, что здесь происходит? Как на самом деле работают minTime и requestLocationUpdates?

Настройка LocationManager:

locManager = (LocationManager) getSystemService(LOCATION_SERVICE);
locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,30000L, 0, locListener);

locListener:

public void onLocationChanged(Location loc) {
    //Keep track of best location
    //Having a location > no location
    if (bestLocation == null)
        bestLocation = loc;
    //More accuracy > Less accuracy
    else if (loc.getAccuracy() <= bestLocation.getAccuracy())
        bestLocation = loc;

    Log.d(TAG, "Location Updated";
}
public void onStatusChanged(String provider, int status, Bundle extras) {
    Log.d(TAG, "New status: " + status);
    if (status== LocationProvider.TEMPORARILY_UNAVAILABLE)
        //Do stuff since the provider is temporarily off
}

Отладочный вывод на реальном устройстве Android (HTC Incredible 2.2):

Location Updated
Location Updated
New status: 2
Location Updated
Location Updated
Location Updated
New status: 2
... (five minutes later)
New status: 1

1 Ответ

0 голосов
/ 07 сентября 2011

Из API :

"Фоновые службы должны быть осторожны при установке достаточно высокого значения minTime, чтобы устройство не потребляло слишком много энергии, оставляя GPS или беспроводное радио включенным.все время. В частности, значения до 60000 мс не рекомендуются."(выделено мое)

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

Если вам нужно узнать местоположение немедленно, используйте getLastKnownLocation(String)

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