//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中,当我向上悬停物体时,传感器(屏幕)未被检测到。任何想法的人?
答案 0 :(得分:2)
我可以看到这段代码的一些问题。首先是你使用
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");
}
答案 1 :(得分:2)
Apple Docs:“并非所有iOS设备都有接近传感器。要确定接近监控是否可用,请尝试启用它。如果proximityMonitoringEnabled属性的值保持为NO,则无法进行接近监控。“
答案 2 :(得分:1)
您的代码没有任何问题(假设您当然实现了proximityChanged:
)。我在iPhone 4上测试了你的代码,它响应我在接近传感器前移动的手。
也许硬件在3GS上略有不同,这意味着它对你正在做的事情更敏感?您可以尝试使用其他iPhone 4设备(或至少验证接近传感器是否可以正常工作,例如使用手机应用程序)?
答案 3 :(得分:1)
答案 4 :(得分:0)
您应该始终检查特定设备是否有接近传感器。 并非所有iOS设备都有接近传感器。
BOOL state = device.proximityState;
if(state)
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(proximityChanged:)
name:@"UIDeviceProximityStateDidChangeNotification" object:nil];
else
NSLog(@"NO");