来源:http://blog.csdn.net/xinruiios/article/details/8985828
一、使用场景:
为了减轻长期点亮屏幕引起的电量消耗,或检测听筒和扬声器模式进行切换时使用,如:在通过过程中,当耳朵靠近听筒时屏幕黑点;
二、使用方法:
1、使用接近传感器首先要启用接近传感设置:
[[UIDevice currentDevice] setProximityMonitoringEnabled:YES];
或
[UIDevice currentDevice].proximityMonitoringEnabled = YES;
2、注册针对传感器状态发生变化的通知:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(sensorStateChange:)
name:UIDeviceProximityStateDidChangeNotification
object:nil];
3、传感器状态变更处理
-(void)sensorStateChange:(NSNotificationCenter *)notification;
{
if ([[UIDevice currentDevice] proximityState] == YES) {
NSLog(@"Device is close to user");
//在此写接近时,要做的操作逻辑代码
}else{
NSLog(@"Device is not close to user");
}
}
4、对于应用中如果不需要总启用传感器是件则需要将第一步中的开关关闭即可;
三、注意事项
对于不希望启动接近传感器功能的应用,如果需要进行扬声器和听筒进行切换过程中,则必须通过启用接近传感器来进行声音输出模式的切换,在此时,必须要注意,如果当声音通过听筒进行播放完毕时,在播放完毕时,此时仍在听筒模式输出,如果此时关闭传感器功能,则导致在离开听筒时,由于传感器功能已经关闭,应用无法再次收到注册的传感器变更通知,而此时如果未能将底层的声音输出模式切换,则导致相关的声音输出仍从听筒中输出,即使引起传感器反映的障碍已经离开传感器作用范围,但应用中获取的传感器状态仍未接近状态,使根据传感器状态进行切换声音输出模式操作失效。
特殊情况:
在iPhone 4s及iPhone5中,在接近传感器功能关闭后,如果此时传感器状态为YES,则在再次启动声音传感器时,不会收到传感器的变更通知;
在iPhone 4中,在接近传感器功能关闭后,如果此时传感器状态为YES,则在再次启动声音传感器时,会先收到一次传感器的变更通知;
此问题的解决方案:当在传感器功能开始时,如果此时传感器传感状态为YES时,此时声音播放结束,仍未出发传感器状态变更时,此时不关闭传感器功能。当引起传感器反映的障碍已经离开传感器作用范围,此时会收到传感器变更通知,在变更通知中检测当前传感器状态是否为开启状态及声音播放状态,如果在传感器状态为YES时,而此时需要开启传感器功能的操作(如声音播放功能)已经结束时,则将传感器功能关闭即可;