我正在开发一个应用程序,需要获取我在体育活动中走的步数。我找到了以下代码:
- (void)countSteps {
[[UIAccelerometer sharedAccelerometer] setUpdateInterval:1.0 / KUPDATEFREQUENCY];
[[UIAccelerometer sharedAccelerometer] setDelegate:self];
px = py = pz = 0;
numSteps = 0;
self.labelSteps.text = [NSString stringWithFormat:@"%d", numSteps];
}
- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {
float xx = acceleration.x;
float yy = acceleration.y;
float zz = acceleration.z;
float dot = (px * xx) + (py * yy) + (pz * zz);
float a = ABS(sqrt(px * px + py * py + pz * pz));
float b = ABS(sqrt(xx * xx + yy * yy + zz * zz));
dot /= (a * b);
if (dot <= 0.82) {
if (!isSleeping) {
isSleeping = YES;
[self performSelector:@selector(wakeUp) withObject:nil afterDelay:0.3];
numSteps += 1;
self.labelSteps.text = [NSString stringWithFormat:@"%d", numSteps];
}
}
px = xx;
py = yy;
pz = zz;
}
- (void)wakeUp {
isSleeping = NO;
}
使用这段代码时,当iPhone的显示屏开启时它能够正常工作,但是当我关闭显示屏时它就不再起作用了。为了跟踪位置,我发现在iOS 7中有一个名为“后台模式”的功能。使用这个功能,我可以在iPhone的显示屏关闭时获取坐标。现在,我需要在显示屏关闭时获取加速度计的值,我该怎么做呢?我在网上读到iOS不允许在后台模式下使用加速度计(只有带有协处理器M7的iPhone 5s可以在显示屏关闭时获取加速度计的值),那我该如何使用加速度计在后台模式下计算步数呢?我想应该有一种方法,否则我就无法理解Moves app是如何工作的。