Возникли проблемы с шагомером Экспо в iOS, произошли изменения? - PullRequest
2 голосов
/ 09 июля 2019

Я работал над кроссплатформенным приложением, созданным с Expo, и у меня были проблемы с шагомером в iOS. Он отлично работает на Android, но на iOS, хотя он запрашивает разрешения, он не может получить значения с отклонением обещания.

Я попытался вернуться к документам, чтобы увидеть, были ли изменения, которые мне нужно внести. Документы действительно изменились для импорта из экспо-датчиков вместо экспо. Я попробовал это, это не меняет отказ от обещания на iOS. Кроме того, использование этого импорта выдает ошибку для Android, что использование дат еще не было реализовано. Я проверил документацию по экспо-датчикам, а автономные экспо-датчики устарели и являются частью основной ветви, хотя в экспо-документах говорят, что теперь нужно использовать этот импорт. Кроме того, вы получаете те же ошибки в примерах кода в документах на их эмуляторе, но я не могу найти никаких замечаний о сломанной iOS.

https://docs.expo.io/versions/latest/sdk/pedometer/

Синтаксис импорта, который я использую:

import {Pedometer} from 'expo';

А как я использую шагомер:

Pedometer.isAvailableAsync().then(
          result => {
            this.setState({
              pedometerAvailability: String(result)
            });
          },
          error => {
            this.setState({
              pedometerAvailability: "No pedometer available: " + error
            });
          }
        );

        //start and end times for the day
        //Take date by the the diary date
        let endDay = new Date(Moment(diaryDate).toDate().valueOf());
        let startDay = new Date(Moment(diaryDate).toDate().valueOf());
        let today = new Date();
        //are we checking today? If not end day should be set as the end of the day
        if (today.getDay() !== endDay.getDay()){
            this.setTime(endDay, 23, 59, 59);
        }

        //setting time for startDay
        this.setTime(startDay, 0, 0, 0);

        //making call
        Pedometer.getStepCountAsync(startDay, endDay).then(
            result => {
                this.setState({
                    stepCount:result.steps
                });
            },
            error => {
                this.setState({
                    stepCount:"Could not get stepCount:" + error
                });
            }
        );
    };

    setTime = (date, h, m, s) =>{
        date.setHours(h);
        date.setMinutes(m);
        date.setSeconds(s);
    };

iOS должна вести себя как Android согласно документам, но, может быть, я где-то ошибаюсь?

...