IOS計步器功能實現之Healthkit和CMPedometer_IOS

來源:互聯網
上載者:User

介紹

CMPedometer:可以訪問使用者活動(可以訪問計步資料) 適用ios8以上的系統 ios可看最下面說明

Healthkit :是ios系統中的健康應用 需要應用授權來訪問健康資料(比如計步)

這兩個有什麼區別呢?

其實 Healthkit 也是 使用 CMPedometer 讀取使用者的步數和走的裡程,當然計算的方法是在手機內部計算的, 它是利用 iphone5s 以上的m處理器來擷取資料計算了,所以5s以下的裝置是不支援 CMPedometer 手機計步的,當然有大牛可以利用重力感應器和加速度感應器一樣可以寫出自己的計步器軟體,我是個菜鳥只能利用系統的拉

Healthkit計步有個缺點, 計步不準,有人會問了:這個 Healthkit 和我下面的 demo 不都是用 CMPedometer 來擷取計步數的,為什麼 Healthkit 不準呢?

答: 那是因為Healthkit記錄的時區問題, ios擷取時間的時區按中國的時區少了8個小時, 舉個例子, 如果我要記錄 5月5日的資料應該是 xxxx-05-05 00:00:00 至xxxx-05-05 23:59:59 這個區間的步數情況, 而 Healthkit 記錄的時區卻是 xxxx-05-04 16:00:00 至 xxxx-05-05 15:59:59 ,所以Healthkit記錄的資訊是不準的, 如果要是自己開發計步軟體呢,我們就要自己寫把, 不要擷取 Healthkit 的資訊啦

以下demo是用 swift語言寫的

定義個全域變數 如果不是全域變數會報錯let pedonmeter:CMPedometer = CMPedometer()在方法裡面寫, 兩種方法用哪個都可以,不明白的地方可以看文檔//判斷該裝置是否支援計步功能if CMPedometer.isStepCountingAvailable(){//開始時間let startTime = getStartTime()//結束時間let endTime = getEndTime()//第一種//擷取一個時間範圍內的資料最大7天  參數 開始時間,結束時間, 一個閉包pedonmeter.queryPedometerDataFromDate(startTime, toDate:endTime, withHandler: { (pedometerData:CMPedometerData?, error:NSError?) -> Void in        if error != nil{          print("error:\(error)")        }        else{          print("開始時間:\(startTime)")          print("結束時間:\(endTime)")          print("步數===\(pedometerData!.numberOfSteps)")          print("距離===\(pedometerData!.distance)")        }      })    }//第二種//擷取指定開始時間到目前時間的資料 參數 開始時間, 一個閉包pedonmeter.startPedometerUpdatesFromDate(startTime, withHandler: { (pedometerData:CMPedometerData?, error:NSError?) -> Void in        if error != nil{          print("error:\(error)")        }        else{          print("開始時間:\(startTime)")          print("結束時間:\(endTime)")          print("步數===\(pedometerData!.numberOfSteps)")          print("距離===\(pedometerData!.distance)")        }      })

下面是擷取時間的方法,我是擷取當天的,你們也可以自己改

/**   擷取當前時區的時間   */  func getEndTime() -> NSDate  {    //轉換成本地時區    let date = NSDate()    let zone = NSTimeZone.systemTimeZone()    let interval = zone.secondsFromGMTForDate(date)    let nowDate = date.dateByAddingTimeInterval(Double(interval))    return nowDate  }/**   擷取開始時間 當天0時0分0秒   */  func getStartTime() -> NSDate  {    let datef = NSDateFormatter()    datef.dateFormat = "yyyy-MM-dd"    let stringdate = datef.stringFromDate(getEndTime())    print("當天日期:\(stringdate)")    let tdate = datef.dateFromString(stringdate)    //擷取本地時區的當天0時0分0秒    let zone = NSTimeZone.systemTimeZone()    let interval = zone.secondsFromGMTForDate(tdate!)    let nowday = tdate!.dateByAddingTimeInterval(Double(interval))    return nowday  }

執行結果:


我當天走了 3107步 距離 2公裡多

注意:如果你像支援ios7的話那不就能使用CMPedometer,CMPedometer 的前身是 CMStepCounter

總結

以上就是iOS實現計步器功能的全部內容,希望本文的內容對大家學習開發IOS能有所協助,如果有疑問歡迎大家留言。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.