iOS开发——步数获取

2016/12/09 iOS开发

最近半个月的开发工作,重点一直是类似于悦跑圈、咕咚这样的运动产品的功能,所以在处理iOS设备在运动中的表现也是积累了一些经验。

打算之后的文章,开始把整体的运动功能,分成简单的模块,来介绍一下。那么今天我们就来围绕iOS设备的计步功能,稍微简单的聊一聊。

大家可能都看过或者知晓HealthKit这个框架,但是实际上,一般去研究过这个框架的,都会知道,实时的获取运动数据,并不是用这个框架的,尤其是步数,这个框架如果你在健康中没有开启步数权限的话,是获取不到的。

所以讲到了实时获取运动数据,苹果还提供了另一个框架给我们使用 —— CoreMotion框架。在这个框架中,我们可以获取加速度、步数等等等等运动数据,今天我们主要是讲讲步数是怎么获取的。

首先我们要去引用这个框架 import CoreMotion

然后生成两个时间,分别为查询步数的起止时间,CoreMotion中会保存七天的运动数据,假设我们生成的时间为startTime,endTime.

分别对这两个时间进行初始化

class StepCounter: NSObject {
    
    private var startTime: NSDate?
    private var endTime: NSDate!
    
   //在这里我只是随意初始化, 你可以根据自己具体的时间周期去设置时间
   startTime = NSDate()
   endTime = NSDate()

CoreMotion框架中,专门有一个类是负责处理步数的,就是CMPedometer,所以在这里我们想获取到步数信息,也要创建一个这个对象,并且同时创建一个int对象保存步数数据

private var pedometer: CMPedometer!
lazy private var numberOfSteps = 0

接下来 我们来看看具体获取步数的代码。

    private func getPedonmeterData(){
        pedometer = CMPedometer()
        if CMPedometer.isStepCountingAvailable(){
            if startTime != nil{
                pedometer.queryPedometerDataFromDate(startTime!, toDate: endTime, withHandler: { (data, error) in
                    if error != nil{
                        print("\(error?.localizedDescription)")
                    }else{
                        if data != nil{
                            dispatch_async(dispatch_get_main_queue(), {
                                self.numberOfSteps = Int(data!.numberOfSteps)
                            })
                        }
                    }
                })
            }
        }
    }

代码是否简单易懂,先判断该设备是否支持计步功能,若是时间不为空,那么调用public func queryPedometerDataFromDate(start: NSDate, toDate end: NSDate, withHandler handler: CMPedometerHandler)函数去查询步数数据,传入的参数有起止时间,之后的操作在闭包中完成,分别判断是否有错误信息以及返回的数据时,就可以轻易的获取到步数。

今天的分享就到这里了,代码非常简短易懂,就不往GitHub上丢了

Search

    Table of Contents