IOS 传感器

一 传感器

  • 什么是传感器 
    • 传感器是一种感应\检测周围环境的一种装置
  • 传感器的作用

    • 用于感应\检测设备周边的信息
    • 不同类型的传感器, 检测的信息也不一样
  • iPhone内置的传感器有

    • 运动传感器\加速度传感器\加速计(Motion/Accelerometer Sensor)
    • 环境光传感器(Ambient Light Sensor)
    • 距离传感器(Proximity Sensor)
    • 磁力计传感器(Magnetometer Sensor)
    • 内部温度传感器(Internal Temperature Sensor)
    • 湿度传感器(Moisture Sensor)
    • 陀螺仪(Gyroscope) 
      … …

二 距离传感器

  • 默认情况下,每一个应用程序距离传感器都是关闭状态 
    • 如果需要,需要通过代码将其打开
// 过期代码  [UIApplication sharedApplication].proximitySensingEnabled

[UIDevice currentDevice].proximityMonitoringEnabled = YES;
 
 
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

三 加速计信息获取##

  • UIAccelerometer方法,该方法已过期
- (void)viewDidLoad {
    [super viewDidLoad];

    // 1.获取单例对象
    UIAccelerometer *acceleromter = [UIAccelerometer sharedAccelerometer];
    // 2.设置代理
    acceleromter.delegate = self;
    // 3.设置采样间隔
    acceleromter.updateInterval = 1.0 / 5;
}
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
#pragma mark - 实现UIAccelerometer的代理方法
- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration
{
    NSLog(@"x:%f y:%f z:%f", acceleration.x, acceleration.y, acceleration.z);
}
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

四 CoreMotion方法##

  • Core Motion获取数据的两种方式

    • push:实时采集所有数据(采集频率高)
    • pull:在有需要的时候,再主动去采集数据
  • 加速计信息获取(pull/push)

 // 1.创建运动管理者对象
 CMMotionManager *mgr = [[CMMotionManager alloc] init];

  // 2.判断加速计是否可用
  if (!self.mgr.isAccelerometerAvailable) {
        NSLog(@"加速计不可用,请更换手机");
        return;
  } 
  // 3.设置采样间隔
  self.mgr.accelerometerUpdateInterval = 1.0;

  // 4.开始采样
  [self.mgr startAccelerometerUpdatesToQueue:[NSOperationQueue mainQueue] withHandler:^(CMAccelerometerData * _Nullable accelerometerData, NSError * _Nullable error) {
        if (error) {
            NSLog(@"%@", error);
            return;
        }
   // 获取加速计的值
   CMAcceleration acceleration = accelerometerData.acceleration;
   NSLog(@"x:%f y:%f z:%f", acceleration.x, acceleration.y, acceleration.z);
    }];
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
// 开始采样
[self.mgr startAccelerometerUpdates];
 
 
  • 1
  • 2
  • 1
  • 2
  • 陀螺仪信息获取(pull/push)
 // push方式获取陀螺仪信息
 // 1.判断陀螺仪是否可用
 if (!self.mgr.isGyroAvailable) {
        NSLog(@"设备小于iPhone4,或者陀螺仪损坏");
        return;
    }
 // 2.设置采样
 self.mgr.gyroUpdateInterval = 1.0 / 10;   
 // 3.开始采样
    [self.mgr startGyroUpdatesToQueue:[NSOperationQueue mainQueue] withHandler:^(CMGyroData * _Nullable gyroData, NSError * _Nullable error) {
        if (error) {
            NSLog(@"%@", error);
            return;
        } 
  // 获取陀螺仪的信息
  CMRotationRate rotationRate = gyroData.rotationRate;
  NSLog(@"x:%f y:%f z:%f", rotationRate.x, rotationRate.y, rotationRate.z);
    }];
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
// 开始采样
[self.mgr startGyroUpdates];
 
 
  • 1
  • 2
  • 1
  • 2

五 摇⼀摇功能##

  • 监控摇一摇的方法 
    • 方法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 /** 摇动结束 */
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

六 计步器##

  • CMStepCounter方法,已过期
// 1.判断计步器是否可用
    if (![CMStepCounter isStepCountingAvailable]) {
        NSLog(@"计步器不可用");
        return;
    }
// 2.开始计步
  // 2.1.创建计步器
  CMStepCounter *stepCounter = [[CMStepCounter alloc] init];

  // 2.2.开始计步
  // updateOn : 用户走了多少步之后,更新block
  NSOperationQueue *queue = [[NSOperationQueue alloc] init];
    [stepCounter startStepCountingUpdatesToQueue:queue updateOn:5 withHandler:^(NSInteger numberOfSteps, NSDate * _Nonnull timestamp, NSError * _Nullable error) {
        if (error) return;

NSString *stepString = [NSString stringWithFormat:@"您一共走了%ld步", numberOfSteps];
[self.stepLabel performSelectorOnMainThread:@selector(setText:) withObject:stepString waitUntilDone:YES];
    }];
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 新方法CMPedometer
// 1.判断计步器是否可用
    if (![CMPedometer isStepCountingAvailable]) {
        return;
    }
// 2.开始计步
  // 2.1.创建计步对象
  CMPedometer *pedometer = [[CMPedometer alloc] init];

  // 2.2.开始计步
  // FromDate : 从什么时间开始计步
  NSDate *date = [NSDate date];
  [self.pedometer startPedometerUpdatesFromDate:date withHandler:^(CMPedometerData * _Nullable pedometerData, NSError * _Nullable error) {
        if (error) {
            NSLog(@"%@", error);
            return;
        }
        NSLog(@"您一共走了%@步", pedometerData.numberOfSteps);
    }];

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 案例:计算7天一共走了多少步
 NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
 fmt.dateFormat = @"yyyy-MM-dd";
 NSDate *fromDate = [fmt dateFromString:@"2015-9-26"];
 NSDate *toDate = [fmt dateFromString:@"2015-9-28"];

 [self.pedometer queryPedometerDataFromDate:fromDate toDate:toDate withHandler:^(CMPedometerData * _Nullable pedometerData, NSError * _Nullable error) {
     NSLog(@"%@", pedometerData.numberOfSteps);
    }];
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
  在iOS应用开发中有很多涉及硬件访问和传感器编程。本书我们将向大家介绍苹果iOS设备主要的传感器应用开发。本书是我们智捷iOS课堂团队编写iOS系列丛书中的一本,目的是使一个有iOS开发基础的程序员通过本书的学习,能够开发iOS 硬件访问和传感器应用的程序。另外,对于没有iOS开发基础读者,我们推荐先阅读我们已经出版的《iOS开发指南——从0基础到App Store上线》(网站:http://www.iosbook1.com),这两本书都是我们编写的,知识体系衔接的很好。 更多关于本书内容请关注本书网站http://www.51work6.cn,本书页面http://www.51work6.cn/?page_id=1426 更多iOS开发相关视频教程请关注http://v.51work6.com    本书是介绍了iOS设备主要的传感器应用开发的相关知识,其中包括手势识别、加速度计、陀螺仪、指南针、磁力计、照相机、摄像头、音频设备访问、定位和蓝牙通信等。而且全部采用基于iOS 7最新的API。    全书分为9章:开篇综述、手势识别、加速度计与陀螺仪、指南针与磁力计、照相机与摄像头、音频设备访问、使用蓝牙、定位和iOS敏捷开发项目实战——增强现实版本铅锤应用。    第2章介绍了手势识别,通过两种方式实现iOS常用手势,这些手势包括了:Tap(点击)、Long Press(长按)、Pan(拖动)、Swipe(滑动)、Rotation(旋转)和Pinch(手指的合拢和张开)。    第3章介绍了加速度计与陀螺仪,加速度计与陀螺仪是可以感知设备运动的两个传感器,通过这些传感器,我们可以开发出很多有趣的应用和游戏。    第4章我们介绍了磁力计,磁力计可以感知周围的磁场,可以开发指南针、罗盘等导航应用,还可以开发特斯拉计(或高斯计)等感知磁场强度的应用等。    第5章我们介绍了照相机与摄像头,对于iOS设备,它们事实上是一个硬件,这一章中我们介绍了图片抓取和视频捕获等技术。    第6章我们介绍了音频设备访问,音频的输入是通过麦克风设备实现,而音频的输出是通过扬声器设备实现的。本章我们介绍AVFoundation框架实现音频播放和音频录制。    第7章我们介绍了使用蓝牙,在蓝牙4.0之后将通信模式分为高速和低速类型。高速类型是传统蓝牙,在iOS中高速蓝牙通信开发可以通过Game Kit实现。低速类型被称为低功耗蓝牙(BLE Bluetooth low energy),可以连接一些量测型传感器,例如:心率监视器、血压计和温度计等,开发BLE可以通过CoreBluetooth.framework实现。本章我们重点介绍Game Kit和低功耗蓝牙通讯。    第8章我们介绍了定位技术,介绍了iOS设备如何实现定位应用开发,其中包括:定位服务编程、地理信息编码和地理信息反编码。此外,还介绍了苹果的微定位技术iBeacon,以及接近传感器。    第9章是项目实战,通过增强现实版本铅锤应用介绍了iOS敏捷开发过程。本项目中用到了视频捕获实现的增强现实技术,还有加速度计等传感器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值