接近传感器无法在iPhone 4设备上工作
问题描述:
//I have created below snippet to let the sensor to be detected.
-(void)addProximitySensorControl {
UIDevice *device = [UIDevice currentDevice];
device.proximityMonitoringEnabled = YES;
BOOL state = device.proximityState;
if(state)
NSLog(@"YES");
else
NSLog(@"NO");
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(proximityChanged:)
name:@"UIDeviceProximityStateDidChangeNotification"
object:nil];
}
在iPhone 3GS或更早版本中proximityChanged:方法被成功调用,但在iPhone 4中,当我悬停物体时,传感器(屏幕)没有被检测到。任何想法的人?接近传感器无法在iPhone 4设备上工作
答
你的代码没有错(假设你确实实现了proximityChanged:
当然)。我在iPhone 4上测试了您的代码,它响应我的手在接近传感器前移动。
也许硬件在3GS上略有不同,这意味着它对你在做什么更敏感?您是否可以尝试使用不同的iPhone 4设备(或者至少验证接近传感器是否可以使用,例如通过使用手机应用程序)?
答
您应经常检查的设备是否有接近传感器与否。 并非所有的iOS设备都有接近传感器。
BOOL state = device.proximityState;
if(state)
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(proximityChanged:)
name:@"UIDeviceProximityStateDidChangeNotification" object:nil];
else
NSLog(@"NO");
答
我可以看到这段代码的一些问题。第一个是您使用
name:@"UIDeviceProximityStateDidChangeNotification"
,而不是
name:UIDeviceProximityStateDidChangeNotification
两个工作,但如果你犯了一个错字用裸版会给你一个编译器错误。 (你想得到编译器错误与错别字,它可以防止无声错误)。
接下来就是在添加通知之前,您并未实际检查接近传感器是否可用。您的代码:
BOOL state = device.proximityState
但是,这只是检查设备是否接近用户的脸。你真正想要的是将proximityEnabled
设置为YES
,然后检查它是否真的被设置。这有点违反直觉。
UIDevice *device = [UIDevice currentDevice];
[device setProximityMonitoringEnabled:YES];
if ([device isProximityMonitoringEnabled]) {
// Do your stuff
}
这里是一个完整的代码示例:
NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];
UIDevice *device = [UIDevice currentDevice];
// Register for proximity notifications
[device setProximityMonitoringEnabled:YES];
if ([device isProximityMonitoringEnabled]) {
[notificationCenter addObserver:self
selector:@selector(proximityChanged:)
name:UIDeviceProximityStateDidChangeNotification
object:device];
} else {
NSLog(@"No Proximity Sensor");
}
答
苹果文档:。“并非所有的iOS设备有接近传感器来确定是否接近监测可用,尝试启用它如果该值proximityMonitoringEnabled属性的值保持为“否”,则不能使用接近度监视。“
此代码检查设备是否接近某些事物('proximityState'),而不是它是否存在('isProximityMonitoringEnabled')。 – 2013-03-01 12:58:55