我正在开发一个应用程序,我应该在其中获取我在体育活动期间所走的步数。我找到了这段代码:
- (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可以在关闭显示屏时获取加速度计值),我如何在后台模式下使用加速度计来计算步数?我想应该有一种方法,否则我无法理解如何移动应用程序 https://itunes.apple.com/it/app/moves/id509204969?mt=8 works.
当显示屏关闭时,您无法访问加速计,但即使显示屏关闭,您也可以监控位置变化,无论 iPhone 型号如何。根据我的猜测,Moves 应用程序使用基于地理位置的更改来计算步数。在里面CL位置管理器文档,我读了这个
在 iOS 6 及更高版本中,您可以在以下情况下延迟位置数据的传送:
您的应用程序在后台运行。建议您使用这个
在您的应用可以稍后处理数据的情况下使用此功能
没有任何问题。例如,一个跟踪用户的应用程序
远足路线上的位置可能会推迟更新,直到用户远足
一定距离,然后一次性处理所有点。推迟
更新允许您的应用程序保持睡眠状态,从而有助于节省电量
更长的时间。
- (void)allowDeferredLocationUpdatesUntilTraveled:(CLLocationDistance)distance timeout:(NSTimeInterval)timeout
如果您的应用程序在后台并且系统能够优化
位置管理器告诉 GPS 硬件存储其电量使用情况
内部新位置,直到指定距离或超时
条件满足。当满足一个或两个条件时,位置
经理通过调用结束延迟位置
locationManager:didFinishDeferredUpdatesWithError: 其方法
委托并将缓存的位置传递给
locationManager:didUpdateLocations: 方法。如果您的应用程序位于
前台,位置管理器不会推迟事件的传递
但确实监视指定的标准。如果您的应用程序移至
背景 在满足标准之前,位置管理器可以开始
推迟事件的交付。
因此,当您获得一组缓存位置时,您可以计算出发生的大致步数。我只是说出我所有的想法,这取决于你!
也看到这个,看起来很有趣https://www.cocoacontrols.com/controls/somotion detector https://www.cocoacontrols.com/controls/somotiondetector
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)