Проблема с разрядкой аккумулятора с помощью фоновой службы определения местоположения - PullRequest
1 голос
/ 24 апреля 2019

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

Проблема, как и ожидалось, чем точнее мы должны получить, тем больше увеличивается разряд батареи. В тот момент, когда Google Play Console Vitals показывает, что число пробуждений намного выше среднего: walarm : com.google.android.location.ALARM_WAKEUP_LOCATOR *

Я хочу знать, что я делаю что-то не так или единственный способ улучшить код - сделать небольшие изменения.

public class LocationService extends Service implements LocationListener {

    private Integer gpsFreqInMillis = 1000 * 10; //10 seconds
    private Integer gpsFreqInDistance = 10; //10 meters
    ...

    public void startUpdatingLocation() {

        ...


        final LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);

        try {
            locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, gpsFreqInMillis, gpsFreqInDistance, this);
        } catch (java.lang.SecurityException ex) {
            Log.i(TAG, "fail to request location update, ignore", ex);
        } catch (IllegalArgumentException ex) {
            Log.d(TAG, "gps provider does not exist " + ex.getMessage());
        }

        try {
            locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, gpsFreqInMillis, gpsFreqInDistance, this);
        } catch (java.lang.SecurityException ex) {
            Log.i(TAG, "fail to request location update, ignore", ex);
        } catch (IllegalArgumentException ex) {
            Log.d(TAG, "gps provider does not exist " + ex.getMessage());
        }

    }

    ...

    @Override
    public void onLocationChanged(final Location newLocation) {
        //saves location in internal database
    }

}

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

1 Ответ

0 голосов
/ 24 апреля 2019

Единственный способ исправить это - оптимизировать обратные вызовы запроса, обновив эти значения в вашем коде до

private Integer gpsFreqInMillis = 1000 * 40; //10 seconds
private Integer gpsFreqInDistance = 20; //10 meters
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...