Мое приложение используется, помимо прочего, для отслеживания водителей, выполняющих доставку, поэтому нам необходимо постоянно отслеживать местоположение водителя. Для этого мы используем службу, которая работает в фоновом режиме и сохраняет координаты внутри, прежде чем мы отправим их на сервер.
Проблема, как и ожидалось, чем точнее мы должны получить, тем больше увеличивается разряд батареи. В тот момент, когда 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 с.