2012-03-22 112 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屬性的值保持爲「否」,則不能使用接近度監視。「