传感器

1.什么是传感器

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

2.传感器的作用

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

3.传感器的类型

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

传感器类型

传感器类型 作用
环境光传感器 感应周边环境光线的强弱(自动调节屏幕亮度)
距离传感器 感应是否有其他物体靠近设备屏幕(打电话自动锁屏)
磁力计传感器 感应周边的磁场
内部温度传感器 感应设备内部的温度(提醒用户降温,防止损伤设备)
湿度传感器 感应设备是否进水(方便维修人员)
陀螺仪 感应设备的持握方式(赛车类游戏)
加速计 感应设备的运动(摇一摇、计步器)
距离传感器
- (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的使用步骤
// 获得单例对象
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

    • 实时采集所有数据(采集频率高)
// 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

    • 在有需要的时候,再主动去采集数据
// 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);
计步器
- (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;
});
}];
}

iOS---开发实用传感器的更多相关文章

  1. iOS开发实用技巧—Objective-C中的各种遍历(迭代)方式

    iOS开发实用技巧—Objective-C中的各种遍历(迭代)方式 说明: 1)该文简短介绍在iOS开发中遍历字典.数组和集合的几种常见方式. 2)该文对应的代码可以在下面的地址获得:https:// ...

  2. iOS开发实用技巧—在手机浏览器头部弹出app应用下载提示

    iOS开发实用技巧—在手机浏览器头部弹出app应用下载提示 本文介绍其简单使用: 第一步:在本地建立一个访问的服务端.  打开本地终端,在本地新建一个文件夹,在该文件夹中存放测试的html页面.   ...

  3. iOS开发实用技巧—项目新特性页面的处理

    iOS开发实用技巧篇—项目新特性页面的处理 说明:本文主要说明在项目开发中会涉及到的最最简单的新特性界面(实用UIScrollView展示多张图片的轮播)的处理. 代码示例: 新建一个专门的处理新特性 ...

  4. ios开发——实用技术篇&Pist转模型详细介绍

    Pist转模型详细介绍 关于Plist转模型在iOS开发中是非常常见的,每开一一个项目或者实现一个功能都要用到它,所以今天就给大家讲讲Plist怎么转成模型数据, 前提:必须有一个Plist文件或者通 ...

  5. iOS开发——实用篇&提高iOS开发效率的方法和工具

    提高iOS开发效率的方法和工具 介绍 这篇文章主要是介绍一下我在iOS开发中使用到的一些可以提升开发效率的方法和工具. IDE 首先要说的肯定是IDE了,说到IDE,Xcode不能跑,当然你也可能同时 ...

  6. iOS开发——实用篇&KVO与KVC详解

    KVO与KVC详解 由于ObjC主要基于Smalltalk进行设计,因此它有很多类似于Ruby.Python的动态特性,例如动态类型.动态加载.动态绑定等.今天我们着重介绍ObjC中的键值编码(KVC ...

  7. ios开发——实用技术篇&网络音频播放

    网络音频播放 在日常的iOS开发中,我们通常会遇到媒体播放的问题,XCode中已经为我们提供了功能非常强大的AVFoundation框架和 MediaPlayer框架.其中AVFoundation框架 ...

  8. iOS开发之──传感器使用 (转载)

    在实际的应用开发中,会用到传感器,下面首先介绍一下iphone4的传感器,然后对一些传感器的开发的API作一简单介绍. AD:WOT2015 互联网运维与开发者大会 热销抢票 在实际的应用开发中,会用 ...

  9. iOS开发——实用篇Swift篇&项目开发常用实用技术

    项目开发常用实用技术 实现拨打电话 要实现打电话功能,最简单最直接的方式便是:直接跳到拨号界面 (注意:这个需要真机调试,模拟器无效果)     UIApplication.sharedApplica ...

  10. ios开发——实用技术篇OC篇&iOS的主要框架

    iOS的主要框架         阅读目录 Foundation框架为所有的应用程序提供基本系统服务 UIKit框架提供创建基于触摸用户界面的类 Core Data框架管着理应用程序数据模型 Core ...

随机推荐

  1. Bash Shell 解析路径获取文件名称和文件夹名

    前言 还是今天再写一个自己主动化打包脚本.用到了从路径名中获取最后的文件名称.这里记录一下实现过程. 当然,最后我也会给出官方的做法.(ps:非常囧,实现完了才发现原来Bash Shell有现成的函数 ...

  2. flask的路由配置,特殊装饰器

    1,flask中的路由 endpoint-url_for反向地址 endpoint默认是视图函数名endpoint="雪雪" methods 指定视图函数的请求方式,默认GET d ...

  3. JDBC访问数据库查询信息的步骤(硬编码格式)

    1 Class.forName()加载驱动 2 DriverManager获取Connect连接 3 创建Statement执行SQL语句 4 返回ResultSet查询结果 5释放资源 packag ...

  4. 苹果Instruments/Shark性能调试工具概述

    在Mac OS X上你可以使用Gprof这样的UNIX工具用于测试程序性能.当然,Apple也有自己的Profiling Tools,用得比较多的是Shark.10.5里还引入了一个基于DTrace的 ...

  5. JAVA THINGKING (二)随笔

    1. 基本数据员的默认值 Boolean false Char '\u0000'(null) byte (byte)0 short  (short)0 int  0 long 0L float 0.0 ...

  6. DTV 常用功能

    AVL/Audio Description(AD SWITCH)/HearingImpaired 文档来自:https://max.book118.com/html/2016/0706/4752022 ...

  7. cmath函数整理

    double a= pow(double x, double y)://返回x的y次方. double a= sqrt(double x)://返回x的平方根. double a=ceil(doubl ...

  8. form的一个特性

    在一个form表单中,若只有一个input,按回车键表单会自动提交,但是当表单中存在多个input时,按回车键不会执行任何操作,这是form表单的一个特性

  9. node 中mongoose使用validate和密码加密的问题

    在今天一直被一个问题困扰,就算是使用mongoose的alidate的时候想要限制密码的位数,比如不能少于几位,但是一直出错. 最后发现原来使用validate的时候,是在数据将要存入数据库的时候,因 ...

  10. jquery 3D云

    http://www.jq22.com/jquery-info1325 http://demo.jq22.com/jquery-cloud-141217202931 下载地址: http://www. ...