分享

为M7处理器做开发

 wintelsui 2014-06-13

原文:Developing for the M7

 

感谢翻译小组成员@answer-huang博客)热心翻译。本篇文章是我们每周推荐优秀国外的技术类文章的其中一篇。如果您有不错的原创或译文,欢迎提交给我们,更欢迎其他朋友加入我们的翻译小组(联系qq:2408167315)。

 

当iPhone 5s发布时我已经开始开发Runtime这个程序,并且从Apple那儿学到关于M7“motion co-processor”的相关知识。目前已经有一些论M7可以干什么,以及它如何进行工作的好文章。从一个开发者角度来讲,M7提供了一种非常好的追踪用户移动时的脚步以及活动类型的方式。我想写写作为一个开发者可以如何使用它,而不介绍M7是什么或者如何工作。

M7的API是Core Motion框架的一部分。使用Core Motion追踪用户的脚步和活动是可以实现的,但是有很多困难,并且需要很多的电量。我们和两个可以直接给我们数据的新类进行交互,而不是自己计算从加速计和陀螺仪中获得的数据。
步数
第一个,CMStepCounter,提供给我们当用户带着设备时所走的步数。这个类里面只有几个方法。有一个类方法告诉你设备是否支持记步功能,亦称M7是否已经安装。还有两个方法用来开始、结束更新步数。还有一个方法用来根据起始日期查询已走步数的历史记录。
我们首先讨论一下获取步数更新。当你的程序正在运行时,每当达到一定的步数,你可以让iOS执行一个block。当用户跑动时,Runtime就使用这个方法更新屏幕码表。根据我的经验,这个更新会根据你的意愿分发。
还有一个查询方法可以用来查询一定时间内的步数。M7保存着7天有用的信息,所以这个接口可以查询这7天内任何时段的信息。最让我吃惊的是这个API查询起来非常快。查询一整周内有价值的步数数据也几乎没怎么花时间。尽管这样,你仍然可以选择指定一个特定的queue来执行block。如果你想要同步回调,那么你可以指定main queue。如果你想根据结果更新UI——你很可能需要这样做,如果你想根据结果做一些其他类型的计算,那么你可能需要使用background queue。
活动
接下来的活动跟踪有两个新类,CMMotionActivityManager和CMMotionActivity。活动管理和计步器遵循相同的设计模式,用类方法确定可用性,基于block方法的更新和查询。
在这种情况下,虽然查询和更新的回调block行为有些许不同。查询block返回一个CMMotionActivity对象的有序数组。活动根据指定发生的时间排序。这和新CoreLocation推迟更新位置的方法非常相似,该方法返回一个有相同排列方式的位置更新列表。而更新的回调block是返回一个单一的CMMotionActivity对象,并且每次活动改变时会被反复调用。
CMMotionActivity对象将已经发生的活动类型(如跑步,步行,站立,骑车或一个未知类型的活动)和系统鉴别出的活动可信度封装起来。一件比较有趣的事就是当你看到数据时,你会发现未知活动类型有一个低或高的可信度。这就意味着iOS也不能确定或完全肯定你到底在干什么。
我已经注意到这么一种数据模式:像行走或跑步这类活动,可信度的低、中,到高是如何变化的。比如活动只有5秒左右的时候,可信度是低的,中等可信度也只有5秒,如果你长时间维持同一种类型的活动,那么将会有一个高的信任度。下面是一个测试程序的屏幕截图,我用来查询某段时间内活动的返回值。红色代表可信度低,绿色代表可信度高。下面这段时间是上周末参观环游美洲的摩托比赛的记录,当时我在人群中不停的穿梭。这也是为什么看起来有点混乱。
总体来说我感觉活动数据是非常准确的。我在德州和纽约的中心公园用Runtime测试过几次跑步的情况,结果非常好。虽然看起来正是我需要的东西,但我还是被跑步和步行的低临界值困扰了很久。这是从Runtime截的一张图,显示我一次跑步时不同的活动类型。我花在跑步上是高亮橙色,而走路是高亮黄色。
为了在Runtime中构建这个功能,我使用了查询API,并简单的查询了一个用户开始和结束跑步时的活动类型,然后我可以遍历返回的活动数据来决定用户一路上哪些路径需要高亮的。
结论
所有的API都巧妙的被设计成了基于block的接口。在某种程度上我认为这是苹果的API设计模式的下一场演化。一个类方法决定访问是否可用,一个回调block的更新方法,一个回调block的查询方法。这是非常清楚,实用,交互简单的接口。
它的数据似乎也是高度精确的。特别是步行和跑步区分的特别精确。我觉得准确性跟你如何拿手机也有关系,当手机在口袋或臂包时,准确度非常高。
如果你考虑为你的程序增加M7支持,希望这篇文章这能为你指明方向。现在除了健身软件外,还有很多其他的软件开始使用M7了。比如Day One(https://itunes.apple.com/us/app/day-one-journal-diary/id421706526),它是一个优秀的iOS和Mac日志程序,它允许你将你最新的步数数据增加到他们日志分类的最新更新。我非常渴望这个夏天我旅行的时候能有一个iPhone5S,这样就可以使用这个新功能了!
M7是iOS中非常伟大的一个新特性,这可以帮助我们建立应用程序时提供更好的体验。这个新特性非常好,API也很有趣。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多