Как получить шаги из Google Fit API?

1

Пардон, нубизм, я совершенно новичок в Android и Google API. У меня есть следующий код, который подключается к GoogleFit. У меня также есть ключ API и Oauth.

Где/как я могу использовать ключ API и Oauth? Много руководств о том, как получить их, но ноль информации о том, где их разместить/как использовать их в приложении.

И как мне на самом деле использовать возвращенные шаги. Я создал глобальный:

private int steps;

и затем попытайтесь установить это через:

steps = (int)total;

но это ничего не делает.

Вот остальная часть функции. Как мне на самом деле получить количество шагов из этого.

 private void accessGoogleFit() {
        Calendar cal = Calendar.getInstance();
        cal.setTime(new Date());
        long endtime = cal.getTimeInMillis();
        cal.add(Calendar.YEAR, -1);
        long starttime = cal.getTimeInMillis();

        DataReadRequest readRequest = new DataReadRequest.Builder()
                .aggregate(DataType.TYPE_STEP_COUNT_DELTA, DataType.AGGREGATE_STEP_COUNT_DELTA)
                .bucketByTime(1, TimeUnit.DAYS)
                .setTimeRange(starttime, endtime, TimeUnit.MILLISECONDS)
                .build();

        Fitness.getHistoryClient(this, GoogleSignIn.getLastSignedInAccount(this))
                .readDailyTotal(DataType.TYPE_STEP_COUNT_DELTA)
                .addOnSuccessListener(new OnSuccessListener<DataSet>() {
                    @Override
                    public void onSuccess(DataSet dataSet) {
                        Log.d("Status", "Success");
                        long total = dataSet.isEmpty()
                                ? 0
                                : dataSet.getDataPoints().get(0).getValue(Field.FIELD_STEPS).asInt();
                        Log.d("Steps ", String.valueOf(total));
                        steps = (int)total; //Trying to get steps here
                    }
                })
                .addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        Log.d("Status", "Failure", e);
                    }
                })
                .addOnCompleteListener(new OnCompleteListener<DataSet>() {
                    @Override
                    public void onComplete(@NonNull Task<DataSet> task) {
                        Log.d("Status", "Complete");

                    }
                });

    }

Ive был вверх и вниз по официальной документации и StackOverflow. Но похоже, что Google сделал большие изменения в API в прошлом году, и поэтому большинство вещей устарели, включая собственные учебники Google (опубликовано в 2015 году). И несколько мест, где обновлена документация, предоставляют фрагменты кода, и я понятия не имею, как их использовать или где их разместить.

Теги:
google-fit
google-fit-sdk

1 ответ

1
Лучший ответ

Вот как я делаю свой запрос 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)
            .addDataType(DataType.TYPE_STEP_COUNT_DELTA, FitnessOptions.ACCESS_READ)
            .build();

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

И моя функция запроса

Calendar cal = Calendar.getInstance();
        cal.setTime(new Date());
        long endTime = cal.getTimeInMillis();
        cal.add(Calendar.WEEK_OF_YEAR, -1);
        long startTime = cal.getTimeInMillis();

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

        Fitness.getHistoryClient(
                this,
                GoogleSignIn.getLastSignedInAccount(this))
                .readData(readRequest)
                .addOnSuccessListener(new OnSuccessListener<DataReadResponse>() {
                    @Override
                    public void onSuccess(DataReadResponse dataReadResponse) {
                        Log.d("TAG_F", "onSuccess: 1 " + dataReadResponse.toString());
                        Log.d("TAG_F", "onSuccess: 1 " + dataReadResponse.getStatus());
                        Log.d("TAG_F", "onSuccess: 1 " + dataReadResponse.getDataSet(DataType.TYPE_STEP_COUNT_DELTA));
                        Log.d("TAG_F", "onSuccess: 1 " + dataReadResponse.getBuckets().get(0));
                        Log.d("TAG_F", "onSuccess: 1 " + dataReadResponse.getBuckets().get(0).getDataSets().size());

                    }
                })
                .addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        Log.d("TAG_F", "onFailure: 1 " + e.getMessage());
                    }
                })
                .addOnCompleteListener(new OnCompleteListener<DataReadResponse>() {
                    @Override
                    public void onComplete(@NonNull Task<DataReadResponse> task) {
                        Log.d("TAG_F", "onComplete: 1 ");
                    }
                });
  • 0
    Я думаю, что это работает ... но я все еще не уверен, как установить int stepNumber ...... могу ли я сделать что-то вроде stepNumber = dataReadResponse.getDataSet (DataType.TYPE_STEP_COUNT_DELTA)); Или мне нужно как-то извлечь его из fitnessOptions?
  • 0
    чтобы уточнить, как мне на самом деле превратить этот ответ в простое целое или длинное, которое я могу использовать в своем приложении?
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню