Получение точной истории пути через фоновый сервис в Android - PullRequest
0 голосов
/ 18 апреля 2019

Мне нужно для моего приложения сервис, который постоянно отслеживает местоположение телефонов.Он используется для создания пути, по которому проходит пользователь, будет отображаться в приложении и должен различаться при ходьбе и других средствах передвижения.Расположение должно быть с высокой точностью в сочетании с временными метками и скоростью и сохранено в sql lite db для дальнейшего использования в моем приложении.

Каков наилучший способ решения этой проблемы?Я столкнулся с тем, что фоновые службы не могли получить местоположение достаточно часто.Моим последним средством было бы сделать его приоритетным, но, возможно, у кого-то уже есть решение этой проблемы.(например, возможно ли получить данные о местоположении, которые Google отслеживает в пригодном для использования формате?) Заранее спасибо!

Редактировать : Мне очень жаль, что я достаточно четкий.Проблема в том, что во время моего исследования я обнаружил, что есть несколько способов получить необходимые данные.Менеджер местоположения и слитое местоположение.Все они ограничены тем, как часто вам разрешено получать данные GPS, когда служба работает в фоновом режиме, что может снизить точность пути.Некоторые решения должны были сделать его приоритетным сервисом, чтобы он не страдал от тех же ограничений, но это не то, что я хочу реализовать.

Чтобы сформулировать более точный вопрос: каков наилучший способ сбора точных (!) Данных о местоположении GPS в течение длительного времени с использованием фоновой службы, не потребляя при этом слишком много энергии?Он также может быть в пакетах, так как он не используется в реальном времени, но для оценки позже.

1 Ответ

1 голос
/ 18 апреля 2019

Попробуйте просто задать конкретные вопросы.В противном случае никто не знает, как помочь или ответить вам.Поскольку вы новичок на этой платформе, я постараюсь ответить на ваш вопрос.

Прежде всего.«Данные, которые Google отслеживает» относятся к типу Location.Вы можете запросить обновления местоположения, используя LocationManager.

Просто зарегистрируйтесь для получения обновлений местоположения в предпочитаемом вами классе:

    # Get Instance of LocationManager
    LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
    # Create Criteria / What Accuracy of do you need? No Requirement means also very week locations will be used
    Criteria gpsCriteria = new Criteria();
    gpsCriteria.setAccuracy(Criteria.NO_REQUIREMENT);
    gpsCriteria.setAltitudeRequired(false);
    gpsCriteria.setBearingAccuracy(Criteria.NO_REQUIREMENT);
    gpsCriteria.setCostAllowed(false);
    gpsCriteria.setPowerRequirement(Criteria.NO_REQUIREMENT);
    // Get the wanted provider
    String gpsProvider = locationManager.getBestProvider(gpsCriteria, true);

    // Request for Location Updates your Class must implement a LocationListener Every second a location is received
    locationManager.requestLocationUpdates(gpsProvider, 1000, 0, this);
    Location location = locationManager.getLastKnownLocation(gpsProvider);

В своем классе вы реализуете LocationListener, как упомянуто выше.В onLocationChange вы получаете Обновления местоположения устройства.Я не знаю, как вы хотите отобразить трек пользователя.Но вы можете получить широту и долготу от этого объекта местоположения.У вас также есть такие показатели, как качество и т. Д.

@Override
public void onLocationChanged(Location location) {
     location.getLatitude() ...
}

Если вы хотите постоянно отслеживать местоположение, вам необходимо внедрить BackgroundService.Ваш запрос на обновление местоположения в onStartCommand.Однако вы должны обрабатывать DeepSleep и другие функции, которые переводят устройство в спящий режим.Но вы можете справиться с этим с помощью WakefulBroadcastReciever и AlarmManager.Вы создаете Тревогу, которая отправляет Намерение, полученное вашим получателем, получатель перезапускает службу, если служба была отключена.Но обращайтесь с этим осторожно, потому что это разряжает батарею устройства, и я не рекомендую это !!Только для некоторых специальных деловых операций.

...