传感器ios:iOS 传感器集锦

2021/11/11 02:55 · 传感器知识资讯 ·  · 传感器ios:iOS 传感器集锦已关闭评论
摘要:

传感器ios:iOS传感器集锦传感器集锦:指纹识别、运动传感器、加速计、环境光感、距离传感器、磁力计、陀螺仪效果预览.gif一、指纹识别应用:指纹解锁、指纹登录、指纹支付苹果从iPhone5S开始,具有指纹识别技术,从iOS8.0之后苹果允许第三方App使用TouchID

传感器ios:iOS 传感器集锦  第1张

传感器ios:iOS 传感器集锦

传感器集锦 :指纹识别、运动传感器、加速计、环境光感、距离传感器、磁力计、陀螺仪
效果预览.gif
一、指纹识别
应用:指纹解锁、指纹登录、指纹支付
苹果从iPhone5S开始,具有指纹识别技术,从iOS8.0之后苹果允许第三方 App 使用 Touch ID进行身份验证。
连续三次指纹识别错误后,会自动弹出密码框,通过Touch ID的密码进行身份验证,如果此时取消密码验证,再2次指纹识别失败后,也就是 3 + 2=5次指纹识别失败后,Touch ID功能被锁定,就只能通过密码来进行身份验证和解锁Touch ID 功能。
指纹.png
全部代码如下:
二、运动传感器/加速计/陀螺仪
应用:水平位置测试、摇一摇、计步器、游戏、特效动画
加速计和运动传感器主要监测设备在X、Y、Z轴上的加速度 ,根据加速度数值,就可以判断出在各个方向上的作用力度,陀螺仪主要用来监测设备的旋转方向和角度。
这几个传感器都是依赖于苹果官方CoreMotion框架,用法都差不多,先判断各个传感器是否可用开启,然后设置各个传感器的采集频率,接着就开始采集数据,并返回采集到的运动信息参数:各个方向的重力加速度、旋转方向角度等等。
网络图片.png
网络图片.jpg
示例效果:图片旋转的第一张图片用于检测设备是否处于水平位置,第二张图是设备无论在竖直/水平方向上怎么旋转,图片都保持于水平/竖直方向垂直。滚动小球不仅用了加速计,还用到了CoreMotion框架中行为管理CMMotionManager中的碰撞、重力行为,和动力学属性:摩擦、密度、弹力、阻力等
图片旋转.png
滚动小球.gif
运动传感器的示例代码如下,其它的用法都差不多,只是相关的方法名称、属性名称和返回的参数类型和值不同,详情可以看demo,注释还算清晰;对于眼镜的绘制可以看下我之前的笔记:CALayer系列、CGContextRef、UIBezierPath、文本属性Attributes
三、环境光感处理器
应用:常见的比如说根据环境的亮度去调整屏幕的亮度,在黑暗情况下,手机会自动调暗屏幕亮度,以防刺眼;iPhone 系统相机拍照时光线暗时会自动打开闪光灯;共享单车在黑暗的情况下扫码时检测到特别暗就自动提示打开闪光灯。
利用摄像头获取环境光感参数,通过摄像头采集环境参数,然后在代理方法中输出,光感越小,环境越暗,然后根据需要做相应的操作。
示例中是环境变暗后就自动提示是否打开闪光灯,打开之后,环境变亮后会自动提示是否关闭闪光灯。
四、距离传感器
距离传感器: 感应是否有其他物体靠近屏幕,iPhone手机中内置了距离传感器,位置在手机的听筒附近,当我们在打电话或听微信语音的时候靠近听筒,手机的屏幕会自动熄灭,这就靠距离传感器来控制
首先打开距离传感器,然后添加通知UIDeviceProximityStateDidChangeNotification监听有物品靠近还是离开,从而做出操作,记得最后要关闭距离传感器,有始有终哦。
示例中是默认用扬声器播放音乐,当有物体(比如耳朵)靠近听筒附近时就切换听筒播放音乐,物体离开后就继续用扬声器播放音乐。
五、磁力计
请看我的上一篇博客:iOS仿系统指南针
效果.png
传?送?之?门? ——> 传感器集锦
温馨提示:请真机调试看效果。
如果需要跟我交流的话:
※ Github:
※ 个人博客:
※ 简书:
※ 微信公众号:iOS
※ QQ:
赞?赞?.gif
参考文献:
传感器ios:iOS 传感器集锦  第2张

传感器ios:iOS-传感器及使用

下面是去apple官网找的iphone6包含的传感器:

iPhone6的感应器.png

1、传感器的类型
iPhone内置的传感器有
运动传感器\加速度传感器\加速计(Motion/Accelerometer Sensor)
环境光传感器(Ambient Light Sensor)
距离传感器(Proximity Sensor)
磁力计传感器(Magnetometer Sensor)
内部温度传感器(Internal Temperature Sensor)
湿度传感器(Moisture Sensor)
陀螺仪(Gyroscope)
指纹识别传感器 (Touch ID)

2、环境光传感器(Ambient Light Sensor)
是iPhone和Mac设备中最为古老的传感器成员
它能够让你在使用 Mac、iPhone、iPad时,眼睛更为舒适
从一个明亮的室外走入相对黑暗的室内后,iOS设备会自动调低亮度,让屏幕显得不再那么光亮刺眼
当你使用iPhone拍照时,闪光灯会在一定条件下自动开启
几乎所有的Mac 都带有背光键盘,当周围光线弱到一定条件时,会自动开启键盘背光

3、距离传感器(Proximity Sensor)
用于检测是否有其他物体靠近设备屏幕
当你打电话或接电话时将电话屏幕贴近耳边,iPhone会自动关闭屏幕 ,好处是
节省电量
防止耳朵或面部不小心触摸屏幕而引发一些不想要的意外操作
题外话:利用距离传感器,能找出很多电视剧的穿帮镜头

4、磁力计传感器(Magnetometer Sensor)
可以感应地球磁场, 获得方向信息, 使位置服务数据更精准
可以用于电子罗盘和导航应用
iPad的Smart Cover盒盖睡眠操作就是基于磁力计传感器

5、内部温度传感器(Internal Temperature Sensor)
从 iPad一代开始,iOS设备都加入了一个内部温度传感器,用于检测内部组件温度,当温度超过系统设定的阈值时,会出现以下提示

6、湿度传感器(Moisture Sensor)
湿度传感器跟其他基于微电子的传感器不同,是一个简单的物理传感器

简单来说,湿度传感器就是一张遇水变红的试纸

Apple的维修人员就是通过检测试纸是否变红,来判断设备是否进水
(设备进水不在保修范围之内)

7、陀螺仪(Gyroscope)
陀螺仪是随着iPhone4的上市首次出现在iOS设备上的传感器
陀螺仪的原理是检测设备在X、Y、Z轴上所旋转的角速度

陀螺仪在赛车类游戏中有重大作用:
模拟汽车驾驶时方向盘旋转的动作
使得这类游戏的操控体验更为真实

8、加速计传感器(Motion/Accelerometer Sensor)
最早出现在iOS设备上的传感器之一
加速计用于检测设备在X、Y、Z轴上的加速度 (哪个方向有力的作用)

加速计可以用于检测设备的摇晃,经典应用场景:摇一摇、计步器

总结:

--.png

距离传感器的使用

proximity.png

加速计的使用
这要用到iOS的一个核心运动框架CoreMotion.framework

1.使用iOS给我们提供的CoreMotion.framework框架,主要是为了访问加速度计和陀螺仪相关的数据2.它不仅仅提供给你获得实时的加速度值和旋转速度值,更重要的是,苹果在其中集成了很多算法,可以直接给你输出把重力加速度分量剥离的加速度,省去你的高通滤波操作,以及提供给你一个专门的设备的三维位置信息。

CoreMotion的使用
CoreMotion主要负责下面三种数据:

1.加速度值CMAccelerometerData2.陀螺仪值CMGyroData3.设备motion值CMDeviceMotion (实际上,这个设备motion值就是通过加速度和旋转速度进行变换算出来的)
CMDeviceMotion属性介绍

1、attitude:通俗来讲,就是告诉你手机在当前空间的位置和姿势。2、gravity:重力信息,其本质是重力加速度矢量在当前设备的参考坐标系中的表达。3、userAcceleration:加速速信息。4、rotationRate:计时的旋转速率,是陀螺仪的输出。

CoreMotion中有两种获取数据的方式:

1、Push
方式:提供一个线程管理器NSOperationQueue和一个回调Block,CoreMotion自动在每一个采样数据到来的时候回调这个Block,进行处理。在这种情况下,Block中的操作会在你自己的主线程内执行。2、Pull
方式:你必须主动去向CMMotionManager要数据,这个数据就是最近一次的采数据。你不去要,CMMotionManager就不会给你。

push方式获取加速计数据

Push.png

push方式获取陀螺仪数据

gyro-Push.png

push方式获取计步器数据
下面是iOS7的用法

cmStepCounter.png

iOS8之后取代CMStepCounter的是 CMPedometer,代码如下
首先声明一个属性
@property (nonatomic, strong) CMPedometer *pedometer;
接下来就可以初始化,通过下面的代码就可以了,注意红框框选住的是获取某一段时间所走步数的代码

iOS8计步.png

文/suppermann(简书作者)

原文链接:

著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

传感器ios:iOS中检测硬件和传感器

首先要知道,你需要查看所需的硬件或传感器是否存在,而不是假设设备有哪些功能。举个例子,你不能假设只有iPhone才有麦克风,而应该使用API来查看麦克风是否存在。下面这段代码的第一个优势在于,它能自动兼容将来推出的新设备和外接麦克风。

第二个优势呢?这段代码只有一行。

检查麦克风可用性的正确方法

1
2
3
4

- (BOOL) microphoneAvailable {
AVAudioSession *session = [AVAudioSession sharedInstance];
return session.inputIsAvailable;
}

对于麦克风,你还需要检测输入设备变化的提醒。也就是当用户插入麦克风时,除了在中做相应的修改外,还要激活UI上的Record按钮。听起来挺酷,不是吗?下面就是具体的实现方法。

检查是否插入麦克风

1
2
3
4
5
6
7
8
9
10
11
12

void audioInputPropertyListener(void* inClientData,
AudioSessionPropertyID inID, UInt32 inDataSize, const void *inData) {
UInt32 isAvailable = *(UInt32*)inData;
BOOL micAvailable = (isAvailable > 0);
//加入更新UI的代码
}
- (void)viewDidLoad {
[super viewDidLoad];
AudioSessionAddPropertyListener(
kAudioSessionProperty_AudioInputAvailable,
audioInputPropertyListener, nil);
}

这里,你要做的就是为增加一个属性监听器,然后在回调中检查它的值。

只要增加很少几行代码,就能够写出正确的设备检测代码了。下一步,你需要扩展这段代码,从而支持其他的硬件和传感器。

使用与观察事件很像。当你向一个类中增加一个属性监听器时,需要负责在适当的时候移除它。在前面这个例子中,由于在中增加了属性监听器,所以需要在方法中移除它。

1. 检测摄像头类型
iPhone最初只有一个摄像头,后来在iPhone 4中增加了一个前置摄像头。iPod touch直到第四代才有摄像头。iPhone 4有前置摄像头,iPad 1(比iPhone 4大)却没有摄像头,而后来的iPad 2同时有了前置和后置摄像头。所有这些都意味着你不应该在假设设备功能的前提下编写代码。实际上使用API更方便。

类含有检测源类型可用性的类方法。

检测是否存在摄像头

1
2
3
4

- (BOOL) cameraAvailable {
return [UIImagePickerController isSourceTypeAvailable:
UIImagePickerControllerSourceTypeCamera];
}

检测是否存在前置摄像头

1
2
3
4
5
6
7
8
9

- (BOOL) frontCameraAvailable
{
#ifdef __IPHONE_4_0
return [UIImagePickerController isCameraDeviceAvailable:
UIImagePickerControllerCameraDeviceFront];
#else
return NO;
#endif
}

检测前置摄像头,需要运行在iOS 4或更高版本中。枚举类型只在iOS 4及更高版本中可用,因为所有带有前置摄像头的设备(iPhone 4和iPad 2)使用的都是iOS 4及更高版本。所以你用到了宏,如果设备使用的是iOS 3或更低版本就返回。

类似地,可以检查设备上的摄像头是否具备视频录制功能。iPhone 3GS及更新设备的摄像头支持录制视频。你可以使用以下代码来检查。

检测摄像头是否支持视频录制

1
2
3
4
5
6
7
8
9
10
11
12
13

- (BOOL) videoCameraAvailable {
UIImagePickerController *picker =
[[UIImagePickerController alloc] init];
// 首次调用前面的方法,检查是否存在摄像头
if(![self cameraAvailable]) return NO;
NSArray *sourceTypes = [UIImagePickerController availableMediaTypesForSourceType:
UIImagePickerControllerSourceTypeCamera];
if (![sourceTypes containsObject:(NSString *)kUTTypeMovie]){
return NO;
}
return YES;
}

这段代码会枚举给定摄像头的可用媒体类型,然后判断它是否包含。

2. 检测照片库是否为空
如果你在使用摄像头,几乎总会用到照片库。在调用显示用户相册前,需要确保它里面有照片。可以用检查摄像头是否存在的方法来查看相册是否为空,只要将或作为源类型传过去就行了。

3. 检测摄像头闪光灯是否存在
到目前为止,带有摄像头闪光灯的唯一设备是iPhone 4^〔1〕^。在未来几年里,将会有越来越多的设备带有摄像头闪光灯。使用的类方法来检查摄像头闪光灯是否存在很容易。

^〔1〕^ 翻译本书时,iPhone 4S和iPhone 5均已发布,它们也带有摄像头闪光灯。——译者注

检测摄像头闪光灯是否存在

1
2
3
4
5
6
7
8

- (BOOL) cameraFlashAvailable {
#ifdef __IPHONE_4_0
return [UIImagePickerController isFlashAvailableForCameraDevice:
UIImagePickerControllerCameraDeviceRear];
#else
return NO;
#endif
}

4. 检测陀螺仪是否存在
陀螺仪是iPhone 4上新增的一个有意思的传感器。iPhone 4之后发布的设备,包括new iPad和iPhone 5,都有陀螺仪。陀螺仪用于测量设备物理位置的相对变化。相比之下,加速计只能测量力的大小,而不能测量扭动。有了陀螺仪,游戏开发者甚至可能实现六轴控制,类似于索尼PlayStation 3控制器或任天堂的Wii控制器提供的功能。你可以使用提供的API来检测陀螺仪是否存在。

检测陀螺仪是否存在

1
2
3
4
5
6
7
8
9

- (BOOL) gyroscopeAvailable {
#ifdef __IPHONE_4_0
CMMotionManager *motionManager = [[CMMotionManager alloc] init];
BOOL gyroAvailable = motionManager.gyroAvailable;
return gyroAvailable;
#else
return NO;
#endif
}

如果陀螺仪是你的应用中一个重要功能,而你的目标设备上没有陀螺仪,那么必须用其他输入方法来设计应用。或者也可以在应用的info.plist中的键中指定它们,防止没有陀螺仪的设备安装该应用。本章稍后会进一步介绍这个键。

5. 检测指南针或磁力计
指南针可用性可以使用中的类来检查。调用中的方法,如果返回值为真,你就可以在应用中使用指南针。指南针在与位置有关的应用和用到了增强现实技术的应用中用处比较大。

6. 检测视网膜屏幕
作为iOS开发人员,你已经知道只要为应用中用到的每个资源增加一个@2x的图片文件,就可以满足视网膜屏幕(Retina Display)的需要。但如果要从远程服务器下载图片,采用视网膜屏幕的设备需要下载的图片分辨率为普通屏幕图片分辨率的两倍。

照片浏览器应用就是一个很好的例子,它类似于Flickr查看器或Instagram。当用户在iPhone 4、new iPad或iPhone 5上启动该应用时,下载的图片分辨率应该为非视网膜屏幕设备上图片分辨率的两倍。一些开发者选择忽略它,直接为所有设备下载高分辨率图片,但这有点浪费带宽,甚至通过EDGE下载时可能要慢得多。相反,你应该在判断出设备使用的是视网膜屏幕之后再下载高分辨率图片。这项检查很容易。

检查设备使用的是否是视网膜屏幕

1
2
3
4
5
6
7
8

- (BOOL) retinaDisplayCapable {
int scale = 1.0;
UIScreen *screen = [UIScreen mainScreen];
if([screen respondsToSelector:@selector(scale)])
scale = screen.scale;
if(scale == 2.0f) return YES;
else return NO;
}

在这段代码中,你会找到设备的,然后检查该设备是否可以显示适用于视网膜屏幕的高分辨率图片。这样,如果苹果推出了外接视网膜屏幕(可能是更新的苹果影院显示器),支持目前这一代iPad直接以视网膜模式输出,那么你的应用无需任何修改依然能工作。

7. 检测振动提醒功能
在写本书时,只有各个版本的iPhone具备振动提醒功能。很遗憾,没有公开的API用于检测设备是否支持振动功能。不过,有两个方法用来选择性地振动不同版本的iPhone:

1
2

AudioServicesPlayAlertSound(kSystemSoundID_Vibrate);
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);

第一个方法会振动iPhone,而在iPod touch/iPad上则会发出“哔哔”的响声。第二个方法只会振动iPhone。在不支持振动的设备上,它什么都不做。如果你正在开发的一款游戏通过振动设备来提示危险,或是开发一款迷宫游戏,当玩家撞到墙时发出振动,那么应该用第二个方法。第一个方法用来提醒用户,包括振动和发出哔哔声,而第二个方法只能用来发出振动。

8. 检测远程控制功能
iOS应用可以处理按下外接耳机上的按钮触发的远程控制事件。处理这类事件,使用如下方法接收通知:

1

[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];

在中实现如下方法:

1

remoteControlReceivedWithEvent:

调用如下方法,确保在不需要这些事件时关闭该功能:

1

[[UIApplication sharedApplication] endReceivingRemoteControlEvents];

9. 检测拨打电话功能
可以检查设备是否支持拨打电话,方法是查看它是否能打开类型的URL。类的方法可以很方便地检查设备上是否有能够处理特定类型URL的应用。在iPhone上,这类URL由iPhone上的电话应用来处理。该方法还可以用来检查能够处理给定URL的具体应用是否已安装到设备上。

检测拨打电话功能

1
2
3
4

- (BOOL) canMakePhoneCalls {
return [[UIApplication sharedApplication]
canOpenURL:[NSURL URLWithString:@"tel://"]];
}

可用性小提示?在iPod touch上,开发者应该完全隐藏面向电话的功能。举个例子,如果你开发一个显示因特网上电话号码列表的黄页应用,应该只在能够拨打电话的设备上显示拨打电话的那个按钮。不要只是简单地禁用它(因为用户做什么都无法启用它)或是显示一个错误提醒。有先例说明,在iPod touch上显示一个“Not an iPhone”错误提醒会导致该应用无法通过苹果应用审核部门的审查。
传感器ios:iOS 传感器集锦  第3张

传感器ios:iOS开发之传感器

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

传感器的作用
用于感应\检测设备周边的信息

不同类型的传感器, 检测的信息也不一样

iPhone中的下面现象都是由传感器完成的

在地图应用中, 能判断出手机头面向的方向

一关灯, iPhone会自动降低亮度让屏幕显得不是那么刺眼

打电话时, 人脸贴近iPhone屏幕时, 屏幕会自动锁屏, 达到省电的目的

... ...

传感器的类型
iPhone5中内置的传感器有

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

环境光传感器(Ambient Light Sensor)
是iOS、Mac设备中最为古老的传感器成员

它能够让你在使用 Mac、iPhone、iPad时,眼睛更为舒适

从一个明亮的室外走入相对黑暗的室内后,iOS设备会自动调低亮度,让屏幕显得不再那么光亮刺眼

当你使用iPhone拍照时,闪光灯会在一定条件下自动开启

几乎所有的Mac 都带有背光键盘,当周围光线弱到一定条件时,会自动开启键盘背光

距离传感器(Proximity Sensor)
用于检测是否有其他物体靠近设备屏幕

当你打电话或接电话时将电话屏幕贴近耳边,iPhone会自动关闭屏幕 ,好处是

节省电量

防止耳朵或面部不小心触摸屏幕而引发一些不想要的意外操作

题外话:利用距离传感器,能找出很多电视剧的穿帮镜头

磁力计传感器(Magnetometer Sensor)

可以感应地球磁场, 获得方向信息, 使位置服务数据更精准
可以用于电子罗盘和导航应用
iPad的Smart Cover盒盖睡眠操作就是基于磁力计传感器

内部温度传感器(Internal Temperature Sensor)
从 iPad一代开始,iOS设备都加入了一个内部温度传感器,用于检测内部组件温度,当温度超过系统设定的阈值时,会出现以下提示

内部温度传感器,对于提升iOS设备自身安全性与稳定性有很大的帮助

湿度传感器(Moisture Sensor)
湿度传感器跟其他基于微电子的传感器不同,是一个简单的物理传感器

简单来说,湿度传感器就是一张遇水变红的试纸

Apple的维修人员就是通过检测试纸是否变红,来判断设备是否进水

(设备进水不在保修范围之内)

陀螺仪(Gyroscope)

陀螺仪是随着iPhone4的上市首次出现在iOS设备上的传感器
陀螺仪可以用于检测设备的持握方式
陀螺仪的原理是检测设备在X、Y、Z轴上所旋转的角速度

陀螺仪在赛车类游戏中有重大作用:

模拟汽车驾驶时方向盘旋转的动作

使得这类游戏的操控体验更为真实

运动传感器\加速度传感器\加速计(Motion/Accelerometer Sensor)
最早出现在iOS设备上的传感器之一

加速计用于检测设备在X、Y、Z轴上的加速度 (哪个方向有力的作用)

加速计可以用于检测设备的摇晃,经典应用场景

摇一摇
计步器

传感器总结

传感器类型

作用

环境光传感器

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

距离传感器

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

磁力计传感器

感应周边的磁场(合盖锁屏)

内部温度传感器

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

湿度传感器

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

陀螺仪

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

加速计

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

距离传感器的使用

1 // 开启距离感应功能
2 [UIDevice currentDevice].proximityMonitoringEnabled=YES;
3 // 监听距离感应的通知
4 [[NSNotificationCenter defaultCenter] addObserver:self
5 selector:@selector(proximityChange:)
6 name:UIDeviceProximityStateDidChangeNotification
7 object:nil];
8
9 - (void)proximityChange:(NSNotificationCenter *)notification {
10 if ([UIDevice currentDevice].proximityState==YES) {
11 NSLog(@"某个物体靠近了设备屏幕"); // 屏幕会自动锁住
12 } else {
13 NSLog(@"某个物体远离了设备屏幕"); // 屏幕会自动解锁
14 }
15 }

您可能感兴趣的文章

本文地址:https://www.ceomba.cn/3846.html
文章标签: ,  
版权声明:本文为原创文章,版权归 ceomba 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!