2012-03-22 12 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]; 
} 

w iPhone 3G lub wcześniej proximityChanged: metoda zwana powodzeniem ale iPhone 4 a ja unosi się do góry na przedmiot z (ekranu) czujnika jego nie jest wykryty. Masz pomysł na Guys?czujnik zbliżeniowy nie działa w iPhone 4 urządzenia

Odpowiedz

1

Kod jest nieprawidłowy (zakładając, że oczywiście wykonano proximityChanged:). Testowałem twój kod na iPhonie 4 i reaguję na ruch mojej dłoni przed czujnikiem zbliżeniowym.

Może sprzęt nieco różni się od 3GS, co oznacza, że ​​jest bardziej czuły na to, co robisz? Czy możesz wypróbować na innym urządzeniu iPhone 4 (lub przynajmniej sprawdzić, czy czujnik zbliżeniowy działa w ogóle, np. Za pomocą aplikacji telefonu)?

0

Zawsze należy sprawdzić, czy dane urządzenie posiada czujnik zbliżeniowy, czy nie. Nie wszystkie urządzenia z systemem iOS są wyposażone w czujniki zbliżeniowe.

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

Ten kod sprawdza, czy urządzenie jest blisko czegoś ('proximityState'), a nie czy istnieje (" isProximityMonitoringEnabled "). –

2

Widzę kilka problemów z tym kodem. Pierwszym jest to, że używasz

name:@"UIDeviceProximityStateDidChangeNotification" 

zamiast

name:UIDeviceProximityStateDidChangeNotification 

zarówno do pracy, ale przy użyciu gołą wersję daje błąd kompilatora, jeśli popełnisz literówkę. (Chcesz uzyskać błąd kompilatora z literówką, zapobiega cichym błędom).

Następną sprawą jest to, że nie sprawdzasz, czy czujnik zbliżeniowy jest dostępny przed dodaniem powiadomienia. Twój kod:

BOOL state = device.proximityState 

Ale to tylko sprawdza, czy urządzenie jest blisko twarzy użytkownika. To, czego naprawdę chcesz, to ustawić proximityEnabled na YES, a następnie sprawdzić, czy rzeczywiście został ustawiony. To trochę sprzeczne z intuicją.

UIDevice *device = [UIDevice currentDevice]; 
[device setProximityMonitoringEnabled:YES]; 
if ([device isProximityMonitoringEnabled]) { 
    // Do your stuff 
} 

Oto pełna przykładowy kod:

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

Jabłko Docs:.. „Nie wszystkie urządzenia iOS mają czujniki zbliżeniowe Aby ustalić, czy monitoring bliskość jest dostępny, spróbuj ją włączyć, jeśli wartość właściwość proximityMonitoringEnabled pozostaje NIE, monitorowanie bliskości nie jest dostępne. "