3

我一直在开发一个用 Expo 构建的跨平台应用程序,但我在 iOS 中的计步器上遇到了问题。它在 android 上运行良好,但在 iOS 上,虽然它确实要求权限,但它无法通过 promise 拒绝检索值。

我已经尝试过查看文档,看看是否有我需要实施的更改。文档确实似乎已更改为从 expo-sensors 而不是 expo 导入。我试过了,它不会改变 iOS 上的承诺拒绝。此外,使用此导入会为尚未实现使用日期的 android 提供错误。我检查了 expo-sensors 文档,并且独立的 expo-sensors 已被弃用,并且是主分支的一部分,尽管 expo 文档说现在要使用此导入。此外,您在他们的模拟器上的文档中的代码示例中会遇到相同的错误,但我找不到关于 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,但也许我在某个地方出错了?

4

0 回答 0