前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >iOS---开发实用传感器

iOS---开发实用传感器

作者头像
用户1941540
发布2018-05-11 11:59:23
1.3K0
发布2018-05-11 11:59:23
举报
文章被收录于专栏:ShaoYLShaoYL

传感器

1.什么是传感器

  • 传感器是一种感应\检测装置, 目前已经广泛应用于智能手机上

2.传感器的作用

  • 用于感应\检测设备周边的信息
  • 不同类型的传感器, 检测的信息也不一样
iPhone中的下面现象都是由传感器完成的
  • 在地图应用中, 能判断出手机头面向的方向
  • 一关灯, iPhone会自动降低亮度让屏幕显得不是那么刺眼
  • 打电话时, 人脸贴近iPhone屏幕时, 屏幕会自动锁屏, 达到省电的目的

3.传感器的类型

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

传感器类型

作用

环境光传感器

感应周边环境光线的强弱(自动调节屏幕亮度)

距离传感器

感应是否有其他物体靠近设备屏幕(打电话自动锁屏)

磁力计传感器

感应周边的磁场

内部温度传感器

感应设备内部的温度(提醒用户降温,防止损伤设备)

湿度传感器

感应设备是否进水(方便维修人员)

陀螺仪

感应设备的持握方式(赛车类游戏)

加速计

感应设备的运动(摇一摇、计步器)

距离传感器
代码语言:javascript
复制
- (void)viewDidLoad {
    [super viewDidLoad];
    
    // 1.开启距离传感器(注意: 默认情况距离传感器是关闭的)
//    [UIApplication sharedApplication].proximitySensingEnabled = YES;
    // 只要开启之后, 就开始实时监听
    [UIDevice currentDevice].proximityMonitoringEnabled = YES;
    
    // 2.当监听到有物体靠近设备时系统会发出通知
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(proximityStateDidChange:) name:UIDeviceProximityStateDidChangeNotification object:nil];
    
}
- (void)dealloc
{
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

// 当监听到有物体靠近设备时调用
- (void)proximityStateDidChange:(NSNotification *)note
{
//    NSLog(@"%@", note);
   if( [UIDevice currentDevice].proximityState)
   {
       NSLog(@"有物体靠近");
   }else
   {
       NSLog(@"物体离开");
   }
}
加速计
  • 加速计的作用
    • 用于检测设备的运动(比如摇晃)
  • 加速计的经典应用场景
    • 摇一摇
    • 计步器
  • 加速计程序的开发
    • 在iOS4以前:使用UIAccelerometer,用法非常简单(到了iOS5就已经过期)
    • 从iOS4开始:CoreMotion.framework
    • 虽然UIAccelerometer已经过期,但由于其用法极其简单,很多程序里面都还有残留
加速计--UIAccelerometer的使用步骤
代码语言:javascript
复制
// 获得单例对象
UIAccelerometer *accelerometer = [UIAccelerometer sharedAccelerometer];

// 设置代理
accelerometer.delegate = self;

// 设置采样间隔
accelerometer.updateInterval = 1.0/30.0; // 1秒钟采样30次

// 实现代理方法
- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration
// acceleration中的x、y、z三个属性分别代表每个轴上的加速度
加速计--Core Motion
  • 在iOS4之前,加速度计由UIAccelerometer类来负责采集数据
  • 随着iPhone4的推出
    • 加速度计全面升级,并引入了陀螺仪
    • 与Motion(运动)相关的编程成为重头戏
    • 苹果特地在iOS4中增加了专门处理Motion的框架-CoreMotion.framework
    • Core Motion不仅能够提供实时的加速度值和旋转速度值,更重要的是,苹果在其中集成了很多牛逼的算法
Core Motion获取数据的两种方式
  • push
    • 实时采集所有数据(采集频率高) ```objc // 1.创建运动管理者对象(强引用) CMMotionManager *mgr = [[CMMotionManager alloc] init];

// 2.判断加速计是否可用(最好判断) if (mgr.isAccelerometerAvailable) { // 加速计可用 }

// 3.设置采样间隔 mgr.accelerometerUpdateInterval = 1.0/30.0; // 1秒钟采样30次

// 4.开始采样(采样到数据就会调用handler,handler会在queue中执行)

  • (void)startAccelerometerUpdatesToQueue:(NSOperationQueue *)queue withHandler:(CMAccelerometerHandler)handler; ```
  • pull
    • 在有需要的时候,再主动去采集数据 ```objc // 1.创建运动管理者对象 CMMotionManager *mgr = [[CMMotionManager alloc] init];

// 2.判断加速计是否可用(最好判断) if (mgr.isAccelerometerAvailable) { // 加速计可用 }

// 3.开始采样

  • (void)startAccelerometerUpdates;

// 4.在需要的时候采集加速度数据 CMAcceleration acc = mgr.accelerometerData.acceleration; NSLog(@"%f, %f, %f", acc.x, acc.y, acc.z); ```

计步器
代码语言:javascript
复制
- (void)viewDidLoad {
    [super viewDidLoad];
    
    // 1.判断计步器是否可用(iOS7开始有的API)
    if (![CMStepCounter isStepCountingAvailable]) {
        NSLog(@"计步器不可用");
        return;
    }
    
    // 2.创建计步器对象
    CMStepCounter *stepCounter = [[CMStepCounter alloc] init];
    
    // 3.开始计步
    NSOperationQueue *queue = [[NSOperationQueue alloc] init];
    [stepCounter startStepCountingUpdatesToQueue:queue updateOn:5 withHandler:^(NSInteger numberOfSteps, NSDate *timestamp, NSError *error) {
        if (error) return;
        
        NSString *stepString = [NSString stringWithFormat:@"您一共走%ld步", numberOfSteps];
        
        // [self.stepLabel performSelectorOnMainThread:@selector(setText:) withObject:stepString waitUntilDone:NO];
        
        dispatch_async(dispatch_get_main_queue(), ^{
            self.stepLabel.text = stepString;
        });
    }];
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015-09-02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 传感器
    • 1.什么是传感器
      • 2.传感器的作用
        • 3.传感器的类型
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档