Значение критериев.POWER_LOW для LocationManager

#android #gps #locationmanager #android-gps

#Android #gps #locationmanager #android-gps

Вопрос:

Класс Criterions не задокументирован подробно.
Может кто-нибудь, пожалуйста, объяснить, что POWER_HIGH POWER_LOW именно и изменить?
Речь идет о разрядке батареи?

 criteria.setPowerRequirement(Criteria.POWER_LOW);                
criteria.setAccuracy(Criteria.ACCURACY_FINE);
...
locationManager.requestSingleUpdate(criteria, locationListener, null);
 

Обновить:
Я просмотрел часть исходного кода. Оказывается, этот параметр игнорируется в моем примере, потому что также задана точность.

createFromDeprecatedCriteria() в LocationRequest.java :

     ...
    int quality;
    switch (criteria.getAccuracy()) {
        case Criteria.ACCURACY_COARSE:
            quality = ACCURACY_BLOCK;
            break;
        case Criteria.ACCURACY_FINE:
            quality = ACCURACY_FINE;
            break;
        default: {
            if (criteria.getPowerRequirement() == Criteria.POWER_HIGH) {
                quality = POWER_HIGH;
            } else {
                quality = POWER_LOW;
            }
        }
    }
    ...
 

Ответ №1:

Существует несколько различных LocationProviders (gps, network, passive и т. Д.). Класс Criterions может использоваться LocationManger для автоматического выбора лучшего поставщика на основе ваших требований.

 Criteria criteria = new Criteria();
criteria.setPowerRequirement(Criteria.POWER_LOW);
criteria.setAccuracy(Criteria.ACCURACY_FINE);
criteria.setSpeedRequired(true);
criteria.setAltitudeRequired(false);
criteria.setBearingRequired(false);
criteria.setCostAllowed(false);

return locationManager.getBestProvider(criteria, true);
 

Как на самом деле используется класс Criterions, можно увидеть здесь.
Установка требования к питанию Criteria.POWER_LOW , вероятно, просто исключит использование устройства с помощью поставщика местоположения GPS (поскольку он использует гораздо больше батареи, чем другие пассивные типы).