2012-03-22 113 views
6
//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设备上工作

回答

1

你的代码没有错(假设你确实实现了proximityChanged:当然)。我在iPhone 4上测试了您的代码,它响应我的手在接近传感器前移动。

也许硬件在3GS上略有不同,这意味着它对你在做什么更敏感?您是否可以尝试使用不同的iPhone 4设备(或者至少验证接近传感器是否可以使用,例如通过使用手机应用程序)?

0

您应经常检查的设备是否有接近传感器与否。 并非所有的iOS设备都有接近传感器。

BOOL state = device.proximityState; 
if(state) 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(proximityChanged:) 
             name:@"UIDeviceProximityStateDidChangeNotification" object:nil]; 
else 
    NSLog(@"NO"); 
+2

此代码检查设备是否接近某些事物('proximityState'),而不是它是否存在('isProximityMonitoringEnabled')。 – 2013-03-01 12:58:55

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"); 
} 
2

苹果文档:。“并非所有的iOS设备有接近传感器来确定是否接近监测可用,尝试启用它如果该值proximityMonitoringEnabled属性的值保持为“否”,则不能使用接近度监视。“