gpt4 book ai didi

ios - 在后台模式下实现的 Core Motion 加速度计的奇怪行为

转载 作者:可可西里 更新时间:2023-11-01 04:53:43 29 4
gpt4 key购买 nike

我正在 iOS 上实现计步器。一个重要的要求是即使应用程序处于后台模式(例如,设备被锁定或用户按下主页按钮),它也必须工作。你可以在 Nike+、Runtastic 计步器等 App Store 中看到这样的实现。

一些 SO 帖子证实,这可以通过 Core Motion 或特别是 CMMotionManagerRequired background modes 的附加属性设置为 location.

我用下面的代码进行了快速测试,发现了一个奇怪的问题:

// AppDelegate.m
- (void)applicationDidEnterBackground:(UIApplication *)application
{
if(self.motionManager==nil) {
self.motionManager=[[CMMotionManager alloc] init];
}
self.motionManager.accelerometerUpdateInterval=1/50;

if(self.accelerometerReadings==nil)
self.accelerometerReadings=[[NSMutableArray alloc] init];

[self.motionManager startAccelerometerUpdatesToQueue:[NSOperationQueue mainQueue] withHandler:^(CMAccelerometerData *accelerometerData, NSError *error) {
dispatch_async(dispatch_get_main_queue(), ^{
[self.accelerometerReadings addObject:accelerometerData];
});
}
}

- (void)applicationWillEnterForeground:(UIApplication *)application
{
NSLog(@"The number of readings %d",self.accelerometerReadings.count);

// do something with accelerometer data...
}

我在 iPhone 4S 和 iOS 6.1 上试过这段代码。当应用程序启动时,我按下主页按钮并摇动它(模拟步行)5 秒钟,然后再次打开应用程序。这些 Action 会重复几次。我得到的输出是:

2013-02-05 16:41:42.028 [1147:907] readings 0
2013-02-05 16:41:51.572 [1147:907] readings 444
2013-02-05 16:42:00.386 [1147:907] readings 1032
2013-02-05 16:42:08.026 [1147:907] readings 1555
...

我没有检查读数的正确性,但快速观察已经发现了一些问题。此应用程序第一次以后台模式运行时没有读数(或有时只有一个读数)。

我在这里做错了什么?这是实现计步器的正确方法吗?

最佳答案

关于ios - 在后台模式下实现的 Core Motion 加速度计的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14704478/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com