我一直在开发一个用 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,但也许我在某个地方出错了?