Можно ли найти расстояние, пройденное пользователем за период времени? - PullRequest
0 голосов
/ 06 марта 2019

Я пытаюсь понять, существует ли какой-либо способ получения централизованной информации о пройденном расстоянии пользователя за день / неделю или между конкретными датами. Я знаю, что ОС (если позволено) собирает информацию о местоположении пользователя, поэтому я думаю, что мог бы быть способ узнать, сколько он путешествовал за определенный период времени.

Примечание: я пытаюсь получить общее количество пройденных миль / км, а не места, где пользователь был или в какое время он путешествовал.

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

Спасибо всем!

Ответы [ 2 ]

0 голосов
/ 06 марта 2019

Я думаю, это поможет вам. Google Fit API: запрос с помощью FitnessOptions, например

    FitnessOptions fitnessOptions = FitnessOptions.builder()
            .addDataType(DataType.AGGREGATE_STEP_COUNT_DELTA, FitnessOptions.ACCESS_READ)
            .addDataType(DataType.TYPE_DISTANCE_DELTA, FitnessOptions.ACCESS_READ)
            .build();

вам нужно будет запросить GoogleSignIn.requestPermissions

и после разрешения сделайте запрос типа

    DataReadRequest readRequest = new DataReadRequest.Builder()
            .read(DataType.TYPE_DISTANCE_DELTA)
            .bucketByTime(8, TimeUnit.DAYS)
            .enableServerQueries()
            .setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS)
            .build();

и звоните

Fitness.getHistoryClient(
                this,
                GoogleSignIn.getLastSignedInAccount(this))
                .readData(readRequest)
                .addOnSuccessListener(new OnSuccessListener<DataReadResponse>() { ...

Скажите, будет ли это успешно, у меня нет времени, чтобы проверить текущие параметры, но в моем случае DataType.TYPE_HEART_RATE_BPM работает хорошо.

0 голосов
/ 06 марта 2019

Да, вы можете, но точность может (или не может) быть проблемой в зависимости от ваших потребностей. Все, что вам нужно сделать, это получать обновления местоположения с помощью экземпляра класса FusedLocationProviderClient.

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

locationCallback = new LocationCallback() {
    @Override
    public void onLocationResult(LocationResult locationResult) {
        if (locationResult == null) {
            return;
        }
        for (Location location : locationResult.getLocations()) {
            // Update UI with location data
            // ...
        }
    };
};

Вы можете использовать метод Location.distanceTo(Location otherLocation) для расчета расстояния между двумя точками ...

currentLocation.distanceTo(previousLocation);

Или вы можете использовать метод Location.distanceBetween() для вычисления расстояния между двумя географическими точками (широта, долгота).

Я упомянул точность в начале, потому что расчет расстояния Location основан на эллипсоиде WGS87, который не учитывает высоты. Вам лучше считывать и анализировать данные датчиков устройств, таких как гироскоп и акселерометр

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