iOS傳感器篇:CoreMotion初探

創(chuàng)新互聯(lián)是一家專業(yè)提供海倫企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、H5場(chǎng)景定制、小程序制作等業(yè)務(wù)。10年已為海倫眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)的建站公司優(yōu)惠進(jìn)行中。
Core Motion
加速計(jì)程序,螺旋儀,步數(shù)計(jì),環(huán)境相關(guān)的事件
iOS傳感器篇:CoreMotion使用
目錄索引
Core Motion報(bào)告了來(lái)自iOS設(shè)備的硬件和環(huán)境相關(guān)的數(shù)據(jù),包括 加速度計(jì) 、 陀螺儀 、 計(jì)步器 、 磁力計(jì) 和 氣壓計(jì) 。你可以使用這個(gè)框架來(lái)訪問(wèn)硬件生成的數(shù)據(jù),這樣你就可以在你的應(yīng)用中使用它。例如,游戲可以使用加速計(jì)和陀螺儀數(shù)據(jù)來(lái)控制屏幕上的游戲行為。
這個(gè)框架的許多服務(wù)允許您訪問(wèn)硬件記錄的原始值和這些值的處理版本。處理過(guò)的值不包括可能會(huì)對(duì)如何使用該數(shù)據(jù)產(chǎn)生負(fù)面影響的數(shù)據(jù)偏移。例如,一個(gè)處理過(guò)的加速度計(jì)值只反映了用戶造成的加速度,而不是由重力引起的加速度。
重要提示
在10.0 以后,為了保護(hù)用戶隱私,必須在info.plist文件增加描述,錯(cuò)誤的描述導(dǎo)入或未填寫將會(huì)引起App崩潰。參考 NSMotionUsageDescription
需要在info.plist?新增NSMotionUsageDescription(Privacy - Motion Usage Description) 鍵值對(duì),并進(jìn)行說(shuō)明。
這個(gè)鍵值對(duì)支持7.0+的版本。
CMMotionManager
啟動(dòng)和管理動(dòng)作服務(wù)的對(duì)象。
您使用CMMotionManager對(duì)象來(lái)訪問(wèn)加速計(jì)數(shù)據(jù)、旋轉(zhuǎn)速率數(shù)據(jù)、磁力計(jì)數(shù)據(jù)和其他設(shè)備運(yùn)動(dòng)數(shù)據(jù)。這些類型的數(shù)據(jù)來(lái)源于一個(gè)設(shè)備的加速度計(jì)和(在一些模型上)它的磁計(jì)和陀螺儀。在創(chuàng)建了CMMotionManager的實(shí)例之后,應(yīng)用程序可以使用它來(lái)接收四種類型的運(yùn)動(dòng):
原始的加速度計(jì)數(shù)據(jù)
原始的陀螺儀數(shù)據(jù)
原始的磁力計(jì)數(shù)據(jù)
設(shè)備運(yùn)動(dòng)數(shù)據(jù)(包括加速計(jì)、旋轉(zhuǎn)速率和屬性測(cè)量值)。
由核心運(yùn)動(dòng)的傳感器融合算法提供的處理設(shè)備運(yùn)動(dòng)數(shù)據(jù)提供了設(shè)備的姿態(tài)、旋轉(zhuǎn)速率、校準(zhǔn)的磁場(chǎng)、重力方向以及用戶在設(shè)備上的加速度。
重要提示
應(yīng)用程序應(yīng)該只創(chuàng)建CMMotionManager類的一個(gè)實(shí)例。這個(gè)類的多實(shí)例可以影響從加速計(jì)和陀螺儀接收數(shù)據(jù)的速率。
在接收運(yùn)動(dòng)數(shù)據(jù)時(shí),應(yīng)用程序可以采用兩種方法中的一種
指定的更新間隔
定期對(duì)運(yùn)動(dòng)數(shù)據(jù)進(jìn)行采樣
用這兩種方法,應(yīng)用程序應(yīng)該調(diào)用適當(dāng)?shù)耐V狗椒?/p>
stopAccelerometerUpdates?停止加速計(jì)更新
stopGyroUpdates?停止陀螺儀更新
stopMagnetometerUpdates停止磁強(qiáng)計(jì)更新
stopDeviceMotionUpdates?停止設(shè)備運(yùn)動(dòng)更新
完成處理加速度計(jì),轉(zhuǎn)速、磁強(qiáng)計(jì),或者設(shè)備運(yùn)動(dòng)數(shù)據(jù)。
處理設(shè)備更新和指定間隔
為了在特定的時(shí)間間隔接收移動(dòng)數(shù)據(jù),應(yīng)用程序調(diào)用一個(gè)“start”方法,該方法使用一個(gè)操作隊(duì)列(NSOperationQueue實(shí)例)和一個(gè)特定類型的block處理程序來(lái)處理這些更新。移動(dòng)數(shù)據(jù)被傳遞到block處理程序中。更新的頻率是由interval屬性的值決定的。
1. 加速計(jì) Accelerometer
1. 設(shè)置accelerometerUpdateInterval屬性來(lái)指定更新間隔。
2. 調(diào)用startAccelerometerUpdatesToQueue:withHandler:方法
3. 加速計(jì)數(shù)據(jù)通過(guò) block 中CMAccelerometerHandler?類型的CMAccelerometerData類獲取。
2. 陀螺儀 Gyroscope
設(shè)置gyroUpdateInterval屬性來(lái)指定更新間隔。
2. 調(diào)用startGyroUpdatesToQueue:withHandler:方法
陀螺儀數(shù)據(jù)通過(guò) block 中CMGyroHandler?類型的CMGyroData類獲取。
3. 磁強(qiáng)計(jì) Magnetometer
1. 設(shè)置magnetometerUpdateInterval屬性來(lái)指定更新間隔。
2. 調(diào)用startMagnetometerUpdatesToQueue:withHandler:方法
3. 加速計(jì)數(shù)據(jù)通過(guò) block 中CMMagnetometerHandler?類型的CMMagnetometerData類獲取。
4. 設(shè)備動(dòng)作 Device motion
1. 設(shè)置deviceMotionUpdateInterval屬性來(lái)指定更新間隔。
2. 調(diào)用startDeviceMotionUpdatesUsingReferenceFrame:或startDeviceMotionUpdatesUsingReferenceFrame:toQueue:withHandler:或?startDeviceMotionUpdatesToQueue:withHandler:方法
3. 加速計(jì)數(shù)據(jù)通過(guò) block 中CMDeviceMotionHandler?類型的CMDeviceMotion類獲取。
周期性獲取數(shù)據(jù)
為了通過(guò)周期性采樣來(lái)處理運(yùn)動(dòng)數(shù)據(jù),該應(yīng)用程序調(diào)用一個(gè)“star”方法,不帶參數(shù),并周期性地訪問(wèn)給定類型的運(yùn)動(dòng)數(shù)據(jù)所持有的運(yùn)動(dòng)數(shù)據(jù)。這種方法是游戲等應(yīng)用程序的推薦方法。在一個(gè)block塊中處理加速計(jì)數(shù)據(jù)會(huì)帶來(lái)額外的開(kāi)銷,大多數(shù)游戲應(yīng)用只對(duì)最新的運(yùn)動(dòng)數(shù)據(jù)感興趣,當(dāng)它們渲染一個(gè)幀時(shí)。
1. 加速計(jì) Accelerometer
調(diào)用startAccelerometerUpdates開(kāi)始更新和定期訪問(wèn)CMAccelerometerData類的accelerometerData屬性
2. 陀螺儀 Gyroscope
調(diào)用startGyroUpdates開(kāi)始更新和定期訪問(wèn)CMGyroData類的gyroData屬性
3. 磁強(qiáng)計(jì) Magnetometer
調(diào)用startMagnetometerUpdates開(kāi)始更新和定期訪問(wèn)CMMagnetometerData類的magnetometerData屬性
4. 設(shè)備動(dòng)作 Device motion
調(diào)用startDeviceMotionUpdatesUsingReferenceFrame:?或?startDeviceMotionUpdates開(kāi)始更新和定期訪問(wèn)CMDeviceMotion類的?deviceMotion屬性。startDeviceMotionUpdatesUsingReferenceFrame:方法(iOS 5.0中的新特性)允許您指定一個(gè)參考幀用于估計(jì)的屬性。
硬件的可用性和狀態(tài)
如果硬件特性(例如陀螺儀)在設(shè)備上是不可用的,那么調(diào)用與該特性相關(guān)的啟動(dòng)方法就沒(méi)有效果。通過(guò)檢查適當(dāng)?shù)膶傩裕梢粤私庥布匦允欠窨捎?例如,對(duì)于陀螺儀數(shù)據(jù),您可以檢查gyroAvailable或gyroActive屬性的值。
確定服務(wù)的可用性 【Determining the Availability of Services】
1. deviceMotionAvailable 屬性
一個(gè)布爾值來(lái)表明設(shè)備的“設(shè)備姿態(tài)”服務(wù)是否可用
2. accelerometerAvailable 屬性
一個(gè)布爾值來(lái)表明設(shè)備的“加速計(jì)”服務(wù)是否可用
gyroAvailable 屬性
一個(gè)布爾值來(lái)表明設(shè)備的“陀螺儀”服務(wù)是否可用
magnetometerAvailable 屬性
一個(gè)布爾值來(lái)表明設(shè)備的“磁強(qiáng)計(jì)”服務(wù)是否可用
確定哪些服務(wù)是活躍的 【Determining Which Services Are Active】
deviceMotionActive 屬性
一個(gè)布爾值來(lái)表明應(yīng)用程序是否接收來(lái)自“設(shè)備姿態(tài)”服務(wù)的更新。
accelerometerActive 屬性
一個(gè)布爾值指示是否正在進(jìn)行“加速計(jì)”更新。
gyroActive 屬性
一個(gè)布爾值用來(lái)表明“陀螺儀”更新是否正在進(jìn)行
magnetometerActive 屬性
一個(gè)布爾值用來(lái)表明“磁強(qiáng)計(jì)”更新是否正在進(jìn)行
管理設(shè)備姿態(tài)更新 【Managing Device Motion Updates】
1. showsDeviceMovementDisplay
控制設(shè)備移動(dòng)顯示是否顯示。
deviceMotionUpdateInterval
以秒為間隔,為block塊處理程序提供設(shè)備移動(dòng)更新
3. - startDeviceMotionUpdatesUsingReferenceFrame:toQueue:withHandler:
在操作隊(duì)列上啟動(dòng)設(shè)備移動(dòng)更新,并使用指定的引用幀和block塊處理程序
- startDeviceMotionUpdatesToQueue:withHandler:
在操作隊(duì)列上啟動(dòng)設(shè)備移動(dòng)更新,并使用指定的block塊處理程序。
- startDeviceMotionUpdatesUsingReferenceFrame:
使用一個(gè)引用框架啟動(dòng)設(shè)備移動(dòng)更新,但是沒(méi)有block塊處理程序。
- startDeviceMotionUpdates
在沒(méi)有block塊處理程序的情況下啟動(dòng)設(shè)備移動(dòng)更新。
- stopDeviceMotionUpdates
停止設(shè)備運(yùn)動(dòng)更新。
deviceMotion
最新的設(shè)備移動(dòng)數(shù)據(jù)樣本。
管理加速計(jì)更新 【Managing Accelerometer Updates】
1. accelerometerUpdateInterval
以秒為間隔,為block塊處理程序提供加速計(jì)更新。
- startAccelerometerUpdatesToQueue:withHandler:
啟動(dòng)加速計(jì)在一個(gè)操作隊(duì)列上的更新和一個(gè)指定的處理程序。
- startAccelerometerUpdates
在沒(méi)有處理程序的情況下啟動(dòng)加速計(jì)更新。
- stopAccelerometerUpdates
停止加速表更新。
accelerometerData
最新的加速度計(jì)數(shù)據(jù)樣本。
管理陀螺儀更新【Managing Gyroscope Updates】
1. gyroUpdateInterval
以秒為間隔,為block塊處理程序提供陀螺儀更新。
- startGyroUpdatesToQueue:withHandler:
啟動(dòng)陀螺儀在一個(gè)操作隊(duì)列上的更新和一個(gè)指定的處理程序。
- startGyroUpdates
在沒(méi)有處理程序的情況下啟動(dòng)陀螺儀更新。
- stopGyroUpdates
停止陀螺儀更新
gyroData
最新的陀螺儀數(shù)據(jù)樣本。
管理磁強(qiáng)計(jì)更新【Managing Magnetometer Updates】
1. magnetometerUpdateInterval
以秒為間隔,為block塊處理程序提供磁強(qiáng)計(jì)更新。
- startMagnetometerUpdatesToQueue:withHandler:
啟動(dòng)磁強(qiáng)計(jì)在一個(gè)操作隊(duì)列上的更新和一個(gè)指定的處理程序。
- startMagnetometerUpdates
在沒(méi)有處理程序的情況下啟動(dòng)磁強(qiáng)計(jì)更新。
- stopMagnetometerUpdates
停止磁強(qiáng)計(jì)更新
magnetometerData
最新的磁強(qiáng)計(jì)數(shù)據(jù)樣本。
常量
1. CMAccelerometerHandler
處理回調(diào)加速計(jì)block數(shù)據(jù)
CMGyroHandler
處理回調(diào)陀螺儀block數(shù)據(jù)
CMMagnetometerHandler
處理回調(diào)磁強(qiáng)計(jì)block數(shù)據(jù)
CMDeviceMotionHandler
處理回調(diào)設(shè)備姿態(tài)block數(shù)據(jù)
CMErrorDomain
Core Motion 的錯(cuò)誤域名
CMError
定義一個(gè)管理ColorSync 結(jié)果碼的類型
CMLogItem
所有設(shè)備關(guān)聯(lián)數(shù)據(jù)類的基類
1. timestamp
日志記錄項(xiàng)有效的時(shí)間。
Device Motion 【設(shè)備姿態(tài)】
CMDeviceMotion
封裝測(cè)量設(shè)備的姿態(tài)、旋轉(zhuǎn)速率和加速度。
得到處理的設(shè)備運(yùn)動(dòng)數(shù)據(jù)
1. attitude
設(shè)備屬性,包括角度傾斜值等等
2. rotationRate
設(shè)備的旋轉(zhuǎn)速率。
3. gravity
重力加速度矢量在設(shè)備的參考系.
4. userAcceleration
用戶給設(shè)備的加速度。
5. magneticField
在設(shè)備上返回磁場(chǎng)矢量。
6. heading
相對(duì)于當(dāng)前的參考幀,起始角度(以度數(shù)測(cè)量)。
7. CMCalibratedMagneticField
校準(zhǔn)的磁場(chǎng)數(shù)據(jù),并估計(jì)校準(zhǔn)的準(zhǔn)確性。
8. CMMagneticFieldCalibrationAccuracy
指示磁場(chǎng)估計(jì)的校準(zhǔn)精度
CMAttitude
該設(shè)備的朝向,相對(duì)于已知的參考幀,在某個(gè)時(shí)間點(diǎn)上的方位。
Core Motion輸出一個(gè)方向余弦矩陣(DCM)——基本上是一個(gè)從上一個(gè)“old”方向到設(shè)備新方向的旋轉(zhuǎn)。
1. roll
設(shè)備轉(zhuǎn)動(dòng)的弧度
2. pitch
設(shè)備傾斜的弧度
3. yaw
設(shè)備偏航的弧度
4. rotationMatrix
返回一個(gè)代表設(shè)備姿勢(shì)的旋轉(zhuǎn)矩陣
5. quaternion
返回一個(gè)代表設(shè)備姿勢(shì)的四元數(shù)
6. - multiplyByInverseOfAttitude:
以一種特定的姿勢(shì)產(chǎn)生的改變
常量
1. CMRotationMatrix
代表旋轉(zhuǎn)矩陣的結(jié)構(gòu)體類型
2. CMQuaternion
四元組的類型表示一種姿勢(shì)的測(cè)量。
3. CMAttitudeReferenceFrame
用于表示引用的所有姿勢(shì)示例的引用框架的枚舉常量
Accelerometers 【加速計(jì)】
為設(shè)備的所有三個(gè)軸提供加速度計(jì)數(shù)據(jù)。
獲得原始加速計(jì)事件
CMAccelerometerData
來(lái)自該設(shè)備的三軸加速計(jì)的數(shù)據(jù)樣本。
if([CMSensorRecorderisAccelerometerRecordingAvailable]) {CMSensorRecorder* recorder = [[CMSensorRecorderalloc] init];? [recorder recordAccelerometerForDuration:(20*60)];// Record for 20 minutes}
1.acceleration
加速度有加速計(jì)計(jì)算得出
常量
1.CMAcceleration
一種包含3軸加速度值的結(jié)構(gòu)類型
CMRecordedAccelerometerData
一個(gè)由設(shè)備記錄的加速度計(jì)數(shù)據(jù)。
1. startDate
當(dāng)傳感器樣品被記錄時(shí),已經(jīng)經(jīng)過(guò)的時(shí)間
2. identifier
加速計(jì)數(shù)據(jù)唯一的標(biāo)識(shí)符
CMSensorRecorder
從設(shè)備中收集和檢索加速度計(jì)數(shù)據(jù)。
1. + isAccelerometerRecordingAvailable
返回一個(gè)布爾值來(lái)表明當(dāng)前設(shè)備加速計(jì)是否支持記錄。
2. - recordAccelerometerForDuration:
開(kāi)始指定時(shí)間并周期性記錄加速計(jì)數(shù)據(jù)
3. - accelerometerDataFromDate:toDate:
檢索在指定日期之間收集的加速計(jì)數(shù)據(jù)
4. - accelerometerDataSince:
為同一批處理中的條目檢索加速計(jì)數(shù)據(jù)。
5. + authorizationStatus
授權(quán)狀態(tài)
CMSensorDataList
系統(tǒng)記錄的加速計(jì)數(shù)據(jù)列表
-(void)processSamplesFromDate:(NSDate*)start toDate:(NSDate)end {CMSensorRecorder* recorder = [[CMSensorRecorderalloc] init];CMSensorDataList* list = [recorder accelerometerDataFrom:start to:end];for(CMRecordedAccelerometerData* datainlist) {// Process the data.NSLog(@"Sample: (%f, %f, %f)", data.acceleration.x,? ? ? ? ? ? ? data.acceleration.y, data.acceleration.z);? }}
Gyroscopes
原始的陀螺儀數(shù)據(jù)。
獲得原始陀螺儀數(shù)據(jù)事件
CMGyroData
一種測(cè)量設(shè)備轉(zhuǎn)速的方法。
1. rotationRate
由設(shè)備陀螺儀測(cè)量的旋轉(zhuǎn)速率。
常量
1.CMRotationRate
由設(shè)備陀螺儀測(cè)量的旋轉(zhuǎn)速率的結(jié)構(gòu)體類型
Pedometer
提供來(lái)自內(nèi)置的處理器來(lái)獲取計(jì)步數(shù)據(jù)
CMPedometer
一個(gè)取得系統(tǒng)生成實(shí)時(shí)行走數(shù)據(jù)
1. + isStepCountingAvailable
返回一個(gè)布爾值,指示在當(dāng)前設(shè)備上是否可以使用計(jì)步計(jì)數(shù)。
2. + isDistanceAvailable
返回一個(gè)布爾值,指示在當(dāng)前設(shè)備上是否可以使用距離估算。
3. + isFloorCountingAvailable
返回一個(gè)布爾值,指示當(dāng)前設(shè)備上是否可以使用樓層計(jì)數(shù)。
4. + isPaceAvailable
返回一個(gè)布爾值,該值指示當(dāng)前設(shè)備上是否可速度信息。
5. + isCadenceAvailable
返回一個(gè)布爾值,指示當(dāng)前設(shè)備上是否有可用的步調(diào)信息
6. + isPedometerEventTrackingAvailable
返回一個(gè)布爾值,指示是否計(jì)步器事件是當(dāng)前設(shè)備上可用。
7. - startPedometerUpdatesFromDate:withHandler:
將最近與行人相關(guān)的數(shù)據(jù)發(fā)送到你的應(yīng)用
8. - stopPedometerUpdates
停止向你的應(yīng)用發(fā)送最近的步行數(shù)據(jù)更新。
9. -startPedometerEventUpdatesWithHandler:
開(kāi)始向你的應(yīng)用程序發(fā)送計(jì)步器事件。
10. -stopPedometerEventUpdates
停止向你的應(yīng)用程序提交計(jì)步器事件
11. -queryPedometerDataFromDate:toDate:withHandler:
查詢?cè)谥付〞r(shí)間段的數(shù)據(jù)
12. CMPedometerHandler
處理計(jì)步器關(guān)聯(lián)數(shù)據(jù)的block
13. CMPedometerEventHandler
處理計(jì)步器事件的block
14. + authorizationStatus
授權(quán)狀態(tài)
CMPedometerData
關(guān)于用戶步行的距離的信息。
1. startDate
計(jì)步器開(kāi)始時(shí)間
2. endDate
計(jì)步器結(jié)束時(shí)間
3. numberOfSteps
用戶所采取的步數(shù)
4. distance
用戶移動(dòng)的估計(jì)的距離(米)
5. averageActivePace
用戶的平均速度,以秒為單位。
6. currentPace
用戶的當(dāng)前速度,以秒為單位。
7. currentCadence
用戶當(dāng)前的步調(diào)頻率,以秒為單位
8. floorsAscended
步行的樓層大概有幾層樓 升序。
9. floorsDescended
步行的樓層大概有幾層樓 降序。
CMPedometerEvent
用戶的步行活動(dòng)發(fā)生了變化。
1. date
記錄計(jì)步器事件的日期。
2. type
發(fā)生的變化類型。
常量
1. CMPedometerEventType
顯示用戶的步行活動(dòng)發(fā)生的變化的常量。
Magnetometer
提供定向數(shù)據(jù)和原始磁量數(shù)據(jù)。
CMMagnetometerData
測(cè)量地球磁場(chǎng)相對(duì)于設(shè)備的尺寸。
1. magneticField
返回磁力儀測(cè)量的磁場(chǎng)。
2. CMMagneticField
包含3軸磁力儀的結(jié)構(gòu)
Altitude
提供基于氣壓傳感器信息的高度數(shù)據(jù)。
CMAltimeter
一個(gè)初始化與高海拔相關(guān)的變化的對(duì)象。
1. + isRelativeAltitudeAvailable
返回一個(gè)布爾值,指示當(dāng)前設(shè)備是否支持生成相對(duì)高度變化的數(shù)據(jù)。
2. - startRelativeAltitudeUpdatesToQueue:withHandler:
開(kāi)始向指定的處理程序塊發(fā)送高度數(shù)據(jù)。
3. - stopRelativeAltitudeUpdates
停止對(duì)高度計(jì)對(duì)象的高度數(shù)據(jù)傳輸
4. + authorizationStatus
授權(quán)狀態(tài)
常量
1. CMAltitudeHandler
接收高度計(jì)數(shù)據(jù)的block
CMAltitudeData
記錄海拔高度變化的數(shù)據(jù)。
1.relativeAltitude
自上次報(bào)告事件以來(lái),海拔(米)的變化。
2. pressure
有記錄的壓力值(千帕 hpa)
Historical Data
提供記錄的運(yùn)動(dòng)事件來(lái)幫助你分析運(yùn)動(dòng)模式。
CMMotionActivityManager
用來(lái)管理設(shè)備存儲(chǔ)的運(yùn)動(dòng)數(shù)據(jù)的對(duì)象。
1. + isActivityAvailable
返回一個(gè)布爾值,指示當(dāng)前設(shè)備上是否可用移動(dòng)數(shù)據(jù)。
2. - startActivityUpdatesToQueue:withHandler:
啟動(dòng)當(dāng)前移動(dòng)數(shù)據(jù)更新到你的應(yīng)用程序。
3. - stopActivityUpdates
停止向你的應(yīng)用發(fā)送動(dòng)態(tài)更新
4. - queryActivityStartingFromDate:toDate:toQueue:withHandler:
收集并返回指定時(shí)間段的歷史運(yùn)動(dòng)數(shù)據(jù)
5. + authorizationStatus
授權(quán)狀態(tài)
常量
1. CMMotionActivityHandler
一個(gè)能報(bào)告與設(shè)備相關(guān)的當(dāng)前運(yùn)動(dòng)的block
2. CMMotionActivityQueryHandler
它報(bào)告在指定的查詢間隔之間發(fā)生的動(dòng)作更新的block
CMMotionActivity
單個(gè)動(dòng)作更新事件的數(shù)據(jù)。
1. stationary
一個(gè)布爾指示設(shè)備是否是靜止的。
2. walking
一個(gè)布爾指示設(shè)備是否在行走。
3. running
一個(gè)布爾指示設(shè)備是否在一個(gè)正在奔跑。
4. automotive
一個(gè)布爾指示設(shè)備是否在汽車中。
5. cycling
一個(gè)布爾指示設(shè)備是否在騎自行車
6. unknown
一個(gè)布爾指示設(shè)備不知道的類型
7. startDate
動(dòng)作發(fā)生的開(kāi)始時(shí)間
confidence
對(duì)運(yùn)動(dòng)類型的評(píng)估的信任
常量
1. CMMotionActivityConfidence
運(yùn)動(dòng)數(shù)據(jù)是準(zhǔn)確常量
有三種獲取磁力計(jì)數(shù)據(jù)的方法,如上圖所示
來(lái)自磁力計(jì)的原始讀數(shù)
磁場(chǎng)磁場(chǎng) 計(jì)讀數(shù)針對(duì)器件偏差(板載磁場(chǎng))進(jìn)行了校正,沒(méi)有器件偏差。
CMCalibratedMagneticField包括兩個(gè)字段:field(XYZ軸上的磁場(chǎng)強(qiáng)度)和accuracy(磁場(chǎng)長(zhǎng)度的精度)。
針對(duì)器件偏置校正磁性計(jì)讀數(shù)并過(guò)濾以消除局部外部磁場(chǎng)(通過(guò)器件移動(dòng)檢測(cè) - 如果器件隨器件移動(dòng),忽略它;否則測(cè)量)
CLHeading是“ 偏離設(shè)備跟蹤的磁場(chǎng)線”,而magnetometerData.magneticField是設(shè)備觀察到的總磁場(chǎng),等于地球的地磁場(chǎng)加上設(shè)備本身及其周圍的偏置“ 。
因此,CLHeading會(huì)提供經(jīng)過(guò)濾的值,其中“參照系”是現(xiàn)有的地球磁場(chǎng)。而磁力計(jì)數(shù)據(jù)提供未經(jīng)過(guò)濾的值,參考幀是設(shè)備。
如果你想知道哪里是磁性或真正北方的位置,推薦使用 CLHeading ,可以做指南針的一類應(yīng)用。如果想要?jiǎng)?chuàng)建一個(gè)響應(yīng)緊鄰設(shè)備磁場(chǎng)的應(yīng)用,或者想要執(zhí)行某種特定的傳感器融合,可以嘗試創(chuàng)建一個(gè)AHRS,然后使用 CMMagneticField 即第二種方式。
1.傳感器的定義:傳感器是一種感應(yīng)、檢測(cè)裝置
2.傳感器的作用:用于檢測(cè)、感應(yīng)設(shè)備的周邊信息;不用類型的傳感器,檢測(cè)到的信息也不一樣
3.iPhone內(nèi)置傳感器有:
(1)運(yùn)動(dòng)傳感器/加速傳感器/加速計(jì)(Motion/Accelerometer Sensor)
加速計(jì)用于檢測(cè)設(shè)備在x、y、z軸上的加速度(那個(gè)方向有力的作用);加速計(jì)可用檢測(cè)設(shè)備的搖晃(搖一搖、計(jì)步器)
(2) 環(huán)境傳感器(Ambient Light Sensor)
檢測(cè)周圍環(huán)境光線的強(qiáng)弱,來(lái)控制當(dāng)前屏幕的亮度,讓我們?cè)谑褂肕ac、iPhone、iPad時(shí),眼睛更為舒適
(3)距離傳感器(Proximity Sensor)
檢測(cè)是否有其他物體靠近設(shè)備屏幕,當(dāng)距離太近時(shí),會(huì)自動(dòng)關(guān)閉屏幕,可以節(jié)省電量,防止耳朵或者面部不小心觸碰屏幕引發(fā)不必要的意外操作
(4)磁力傳感器(Magnetometer Sensor)
可以感應(yīng)地球磁場(chǎng),獲取方向信息,使位置服務(wù)更為精確,可以用于電子羅盤、或者導(dǎo)航應(yīng)用,iPad的smart cover 盒蓋睡眠操作就是基于磁力計(jì)傳感器實(shí)現(xiàn)的
(5)內(nèi)部溫度傳感器(Internal Temperature Sensor)
用于檢測(cè)內(nèi)部組件的溫度,當(dāng)溫度過(guò)高時(shí),會(huì)有溫度過(guò)高提示,可以防止溫度超高引起iPhone設(shè)備的安全性與穩(wěn)定性
(6)濕度傳感器(Moisture Sensor)
濕度傳感器跟其他基于微電子的傳感器不同,濕度傳感器是一個(gè)簡(jiǎn)單地物理傳感器,濕度傳感器及時(shí)一張遇水變紅的試紙;apple維修店的員工就是根據(jù)是否試紙變紅來(lái)判斷當(dāng)前設(shè)備是進(jìn)水
(7)陀螺儀(Gyroscoper)
陀螺儀可以用于檢測(cè)設(shè)備的持握方式;陀螺儀的原理是檢測(cè)設(shè)備在x、y、z軸的角速度
4.傳感器總結(jié)
關(guān)于傳感器(Sensor),Apple官方好像并沒(méi)有專門列出來(lái)介紹過(guò),我只能從前輩的文章尋找,很多文章中都給iOS傳感器進(jìn)行過(guò)很詳細(xì)的分類介紹,但有的傳感器只是有過(guò)介紹,沒(méi)有介紹使用方法或API,當(dāng)然也有可能是我沒(méi)搜索到,比如濕度傳感器很多文章都提到,但詳細(xì)使用方式就未曾看到過(guò),還有這邊的濕度傳感器是指iPhone內(nèi)部的?還是指iPhone所在外部環(huán)境的?
iPhone的傳感器是經(jīng)過(guò)長(zhǎng)時(shí)間不停的變化和改進(jìn)的,因?yàn)閭鞲衅饕宦?tīng)名字就知道這種變化和改進(jìn)十之八九是要與硬件有關(guān)系的。知乎中有一遍文章介紹的很詳細(xì), iPhone這十年在傳感器上的演進(jìn)- 知乎專欄 。
我姑且按照我查看的資料對(duì)iOS傳感器進(jìn)行一個(gè)不精確分類。
知乎知友 Hi-iD 的 答案 介紹過(guò)這兩個(gè)傳感器的關(guān)系,本人簡(jiǎn)單總結(jié)如下:
距離傳感器的使用的使用相對(duì)簡(jiǎn)單:
現(xiàn)在對(duì)iPhone頂部中心一個(gè)孔進(jìn)行遮擋,就能感受的距離傳感器。
Core Motion 是關(guān)于accelerometers(加速計(jì)), gyroscopes(陀螺儀), pedometers(步數(shù)計(jì)), magnetometers( 磁力計(jì)), and barometers(氣壓計(jì))等5個(gè)傳感器使用的框架, 暫時(shí)就按照字面意思翻譯成核心運(yùn)動(dòng)框架。官方文檔的介紹:
之后的文章就學(xué)習(xí) Core Motion 的使用。????
當(dāng)前題目:ios傳感器開(kāi)發(fā),iphone研究傳感器
瀏覽路徑:http://chinadenli.net/article35/dsejdpi.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、靜態(tài)網(wǎng)站、建站公司、定制網(wǎng)站、企業(yè)網(wǎng)站制作、網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)