使用 iOS 7 在后台获取步骤

2024-04-26

我正在开发一个应用程序,我应该在其中获取我在体育活动期间所走的步数。我找到了这段代码:

- (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(使用前将#替换为@)

使用 iOS 7 在后台获取步骤 的相关文章

随机推荐

  • 根据时间变量对两个表中的一对 COUNT 求和

    花了一个多小时的时间寻找这个问题的答案 但运气不佳 我有两个具有相同列名的区域表 我可以根据以下查询为任一表提供结果列表 将 Table2 替换为 Table1 SELECT Table1 YEAR FORMAT COUNT Table1
  • GitHub Actions 工作流程不响应其他工作流程中的推送事件

    我创建了一个工作流程 在推送分支 A 时自动将分支 A 合并到分支 B 中 并创建了一个在推送分支 B 时运行的工作流程 但是 当推送分支 B 时 工作流不会运行 这是 GitHub 规范吗 如果是这样 我想知道是否有文档或问题明确说明了这
  • 基于 GPO DisplayName 而不是 Id 备份 GPO

    因此 我正在备份域控制器的所有 GPO 我注意到 Backup GPO cmdlet 备份 GPOS 的方式非常不友好 默认情况下 它为每个以 ID 命名的 GPO 创建一个文件夹 该文件夹甚至与其 GPOID GUID 不匹配 这是一个示
  • AWS Elastic Beanstalk 无效的二进制包

    我正在致力于将项目从 Heroku 迁移到 AWS 部署后我不断收到错误消息 无效的 ELF 标头 我在使用 AWS Lambda 时发现了类似问题的帖子 但我不明白为什么 Elastic Beanstalk 中的二进制包会出现问题 Ela
  • 我需要异常排序 mysql 结果

    我正在尝试从当前日期开始对结果进行升序排序 这就是我现在使用的 SELECT FROM friends JOIN bdays ON bdays user friends friendname WHERE username userid OR
  • PyZMQ 是否处理为每个新客户端连接创建线程?

    我正在使用 PyZMQ 创建请求 回复服务器 并且我试图弄清楚为每个新客户端连接创建线程的行为是否由 PyZMQ 自动处理 最终 我试图弄清楚来自一个客户端的请求需要很长时间才能回复 是否会阻止来自所有其他客户端的请求 通常 我会在 Pyt
  • 使用SQL Server Management Studio远程连接docker容器

    Context 我正在尝试构建一个开发 SQL Server 我可以在其上继续学习 SQL 并使用 Microsoft SQL Server Management Studio SSMS 在 Windows PC 上访问 因此 我将 Adv
  • 将 Logcat 保存到 Android 设备中的文本文件

    我在 Android 设备中运行应用程序时发现一些崩溃 但模拟器中没有显示 所以我需要将 Logcat 保存在设备内存或 SD 卡中的文本文件中 您能建议我这样做的好方法吗 在应用程序的开头使用 Application 类 这允许正确的文件
  • Jquery:检查div是否包含文本,然后执行操作

    我试图在 jQuery 中检查 div 是否包含一些文本 然后添加一个类 如果包含 所以我写了这样的东西 if field gt div field item text indexOf someText 0 somediv addClass
  • X3:非终端解析器上的链接器错误(未解析的外部符号“parse_rule”)

    首先我使用的是MSVC 2017 最新版本 这是我的非终结符解析器的代码 播放器 hpp namespace parse namespace impl namespace x3 boost spirit x3 struct tag usin
  • 地理编码器 getFromLocation 失败

    我正在尝试从坐标中获取地标 我在用着geoLocator为了那个原因 今天早上工作正常 但现在抛出平台异常 PlatformException IO ERROR A network error occurred trying to look
  • angularjs foreach循环通过依赖于先前请求的http请求

    我想循环遍历一个数组以角度执行 http jsonp 请求 但是每个请求都会略有不同 具体取决于前一个 http jsonp 请求的时间戳 我试图循环 5 个请求 每个请求都依赖于前一个请求信息 如何执行 foreach 循环来等待每个 h
  • 如何在 django 中搜索具有 url 模式的字符串?

    我想为每个创建的帐户创建一个个人资料页面 创建后 可以像这样访问用户配置文件 http example com 用户名 http example com username 但在创建之前 我应该验证该 url 是否已经可用并且未被现有 url
  • Opengraph 和 music.listen

    尝试了几次使用 music listen 动作 最终尝试创建我们自己的聆听动作和歌曲对象 一些帖子表明 music listen 以及内置于动作和对象中的歌曲目前仅可供发布合作伙伴使用 有人能告诉我这是否属实吗 如果是 我们如何成为音乐 o
  • 在Java中,在哪里放置代码以在窗口关闭时可靠地触发?

    我有几个窗口 我想在用户采取操作关闭窗口 通过标题栏中的按钮 菜单项或我提供的按钮 之后和处理窗口之前保存默认值 有些窗口我可以DISPOSE ON CLOSE 但有些窗口我需要在它们被dispose 之前提供信息 窗体窗口关闭 http
  • fullCalendar 在同一天找到其他事件?

    我需要检测同一天的其他事件 我希望能够做的是 查找 eventClass X 的事件是否与 eventClass Y 的删除事件在同一天存在 如果不存在 它会警告用户 eventClass X 不存在 否则允许用户删除该事件 这可能吗 在探
  • 非成员规则在 Prolog 中无法按预期工作

    我正在尝试在 Prolog 中创建一个迷宫程序 其目的是找到一条从迷宫起点到迷宫中心点 m 的路线 迷宫由使用四种颜色之一连接的正方形组成 蓝色 绿色 紫色或橙色 从起点到中心的路线遵循四种颜色的重复图案 我创建了以下代码 link2 A
  • 如何让 SymPy 收集偏导数?

    我一直在使用 SymPy 来扩展复杂偏微分方程的项 并希望使用 Collect 函数来收集项 然而 在处理微分变量不同的二阶 或高阶 导数时似乎存在问题 在下面的代码示例中collect expr6 有效 但是collect expr7 没
  • IOS:给@selector添加一个参数

    当我有这行代码时 UILongPressGestureRecognizer downwardGesture UILongPressGestureRecognizer alloc initWithTarget self action sele
  • 使用 iOS 7 在后台获取步骤

    我正在开发一个应用程序 我应该在其中获取我在体育活动期间所走的步数 我找到了这段代码 void countSteps UIAccelerometer sharedAccelerometer setUpdateInterval 1 0 KUP