iOS---开发实用传感器
传感器
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---开发实用传感器的更多相关文章
- iOS开发实用技巧—Objective-C中的各种遍历(迭代)方式
iOS开发实用技巧—Objective-C中的各种遍历(迭代)方式 说明: 1)该文简短介绍在iOS开发中遍历字典.数组和集合的几种常见方式. 2)该文对应的代码可以在下面的地址获得:https:// ...
- iOS开发实用技巧—在手机浏览器头部弹出app应用下载提示
iOS开发实用技巧—在手机浏览器头部弹出app应用下载提示 本文介绍其简单使用: 第一步:在本地建立一个访问的服务端. 打开本地终端,在本地新建一个文件夹,在该文件夹中存放测试的html页面. ...
- iOS开发实用技巧—项目新特性页面的处理
iOS开发实用技巧篇—项目新特性页面的处理 说明:本文主要说明在项目开发中会涉及到的最最简单的新特性界面(实用UIScrollView展示多张图片的轮播)的处理. 代码示例: 新建一个专门的处理新特性 ...
- ios开发——实用技术篇&Pist转模型详细介绍
Pist转模型详细介绍 关于Plist转模型在iOS开发中是非常常见的,每开一一个项目或者实现一个功能都要用到它,所以今天就给大家讲讲Plist怎么转成模型数据, 前提:必须有一个Plist文件或者通 ...
- iOS开发——实用篇&提高iOS开发效率的方法和工具
提高iOS开发效率的方法和工具 介绍 这篇文章主要是介绍一下我在iOS开发中使用到的一些可以提升开发效率的方法和工具. IDE 首先要说的肯定是IDE了,说到IDE,Xcode不能跑,当然你也可能同时 ...
- iOS开发——实用篇&KVO与KVC详解
KVO与KVC详解 由于ObjC主要基于Smalltalk进行设计,因此它有很多类似于Ruby.Python的动态特性,例如动态类型.动态加载.动态绑定等.今天我们着重介绍ObjC中的键值编码(KVC ...
- ios开发——实用技术篇&网络音频播放
网络音频播放 在日常的iOS开发中,我们通常会遇到媒体播放的问题,XCode中已经为我们提供了功能非常强大的AVFoundation框架和 MediaPlayer框架.其中AVFoundation框架 ...
- iOS开发之──传感器使用 (转载)
在实际的应用开发中,会用到传感器,下面首先介绍一下iphone4的传感器,然后对一些传感器的开发的API作一简单介绍. AD:WOT2015 互联网运维与开发者大会 热销抢票 在实际的应用开发中,会用 ...
- iOS开发——实用篇Swift篇&项目开发常用实用技术
项目开发常用实用技术 实现拨打电话 要实现打电话功能,最简单最直接的方式便是:直接跳到拨号界面 (注意:这个需要真机调试,模拟器无效果) UIApplication.sharedApplica ...
- ios开发——实用技术篇OC篇&iOS的主要框架
iOS的主要框架 阅读目录 Foundation框架为所有的应用程序提供基本系统服务 UIKit框架提供创建基于触摸用户界面的类 Core Data框架管着理应用程序数据模型 Core ...
随机推荐
- 显示 目录 大小 du
[root@hadoop1 /]# du -BG -d 11G ./boot0G ./dev63G ./homedu: 无法访问"./proc/6689/task/6689/fd/4&qu ...
- js控制页面显示
两个菜单切换显示页面内容: js控制代码, /** JS初始化 **/ $(document).ready(function() { $('#email_btn').click(function(){ ...
- xcode 8.1 (8B62)真机调试配置
1.点击菜单栏中的Xcode->Preferences->Accounts,如图: 点击上图左下角中的“+”号,登陆一个Apple id(前提已经有了一个apple id账号), 2.然后 ...
- bzoj 2006 超级钢琴 —— ST表
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2006 本来应该是可以用主席树,找区间最小值,取出来后再找那段区间的次小值...... 但也可 ...
- c#截屏功能的实现
using System;using System.Collections.Generic;using System.Drawing;using System.Linq;using System.Ru ...
- ['1' for i in range(4)]
' for i in range(4)]) 结果: [']
- lua 与C通过c api传递table
此文转自http://blog.csdn.net/perfect2011/article/details/19200511(感谢...) 首先了解下c++与lua之间的通信: 假设在一个lua文件中有 ...
- 第四代增强 NEW BADI的定义及实现
NEW BADI 是在第四代增强框架下创建的BADI,是相对于第三代增强Classic Badi 而言的. 根据第四代增强的基本概念,所有显式增强Enhancement options 都必须放在增强 ...
- JAVA大数处理(BigInteger,BigDecimal)
原文链接 Java中有两个类BigInteger和BigDecimal分别表示大整数类和大浮点数类. 这两个类都在java.math.*包中,因此每次必须在开头处引用该包. Ⅰ基本函数: 1.valu ...
- 题解报告:hdu 2084 数塔(递推dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2084 Problem Description 在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这 ...