iPhone内置的传感器有:
运动传感器\加速度传感器\加速计(Motion/Accelerometer Sensor)
环境光传感器(Ambient Light Sensor)
距离传感器(Proximity Sensor)
磁力计传感器(Magnetometer Sensor)
内部温度传感器(Internal Temperature Sensor)
湿度传感器(Moisture Sensor)
陀螺仪(Gyroscope)
距离传感器
感应是否有其他物体靠近设备屏幕(打电话自动锁屏)
// 开启距离感应功能
[UIDevice currentDevice].proximityMonitoringEnabled = YES;
// 监听距离感应的通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(proximityChange:) name:UIDeviceProximityStateDidChangeNotification object:nil];
- (void)proximityChange:(NSNotificationCenter *)notification {
if ([UIDevice currentDevice].proximityState == YES) {
NSLog(@"屏幕被遮挡了");
} else {
NSLog(@"屏幕被遮挡了");
}
}
加速计
用于检测设备的运动(比如摇晃,计步)检测设备在X、Y、Z轴上的加速度 (哪个方向有力的作用,哪个方向运动了)
根据加速度数值,就可以判断出在各个方向上的作用力度
随着iPhone4的推出,加速度计全面升级,并引入了陀螺仪,与Motion(运动)相关的编程成为重头戏
苹果特地在iOS4中增加了专门处理Motion的框架CoreMotion.framework
Core Motion不仅能够提供实时的加速度值和旋转速度值,更重要的是,苹果在其中集成了很多牛逼的算法
Core Motion获取数据的两种方式:
- push: 实时采集所有数据(采集频率高)
- pull: 在有需要的时候,再主动去采集数据
Core Motion的使用步骤(push)
- 创建运动管理者对象
CMMotionManager *mgr = [[CMMotionManager alloc] init];
- 判断加速计是否可用(最好判断)
if (mgr.isAccelerometerAvailable) { // 加速计可用 }
- 设置采样间隔
mgr.accelerometerUpdateInterval = 1.0/30.0; // 1秒钟采样30次
- 开始采样(采样到数据就会调用handler,handler会在queue中执行)
- (void)startAccelerometerUpdatesToQueue:(NSOperationQueue *)queue withHandler:(CMAccelerometerHandler)handler;
Core Motion的使用步骤(pull)
- 创建运动管理者对象
CMMotionManager *mgr = [[CMMotionManager alloc] init];
- 判断加速计是否可用(最好判断)
if (mgr.isAccelerometerAvailable) { // 加速计可用 }
- 开始采样
- (void)startAccelerometerUpdates;
- 在需要的时候采集加速度数据
CMAcceleration acc = mgr.accelerometerData.acceleration; NSLog(@"%f, %f, %f", acc.x, acc.y, acc.z);
摇一摇
监控摇一摇的方法:
方法1:通过分析加速计数据来判断是否进行了摇一摇操作(比较复杂)
方法2:iOS自带的Shake监控API(非常简单)
判断摇一摇的步骤:实现3个摇一摇监听方法
- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event /** 检测到摇动 */
- (void)motionCancelled:(UIEventSubtype)motion withEvent:(UIEvent *)event /** 摇动取消(被中断) */
- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event /** 摇动结束 */
计步器
CMStepCounter 类提供访问用户携带设备步行的步数接口,步行信息通过内置硬件去采集和存储,让第三方可以通过查询数据来获知用户最近的身体运动情况。第三方可以通过这个类收集当前或任何历史的步行数据。
这个类使用起来非常的简单:
- 用于判断设备是否支持计步
+ (BOOL)isStepCountingAvailable;
- 收集并返回某一时间段内的历史步数数据(queue不能为nil)
- (void)queryStepCountStartingFrom:(NSDate *)start to:(NSDate *)end toQueue:(NSOperationQueue *)queue withHandler:(CMStepQueryHandler)handler;
- 开始更新步数计数 (queue不能为nil)
- (void)startStepCountingUpdatesToQueue:(NSOperationQueue *)queue updateOn:(NSInteger)stepCounts withHandler:(CMStepUpdateHandler)handler;
- 停止更新步数计数
- (void)stopStepCountingUpdates;
最后更新: 2023年03月25日 22:39:54
本文链接: http://aeronxie.github.io/post/d7f288de.html
版权声明: 本作品采用 CC BY-NC-SA 4.0 许可协议进行许可,转载请注明出处!