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

Nell'iPhone 3GS o in precedenza proximityChanged: il metodo viene chiamato correttamente ma in iPhone 4 mentre sto passando l'oggetto da sopra il sensore (schermo) non viene rilevato. Qualche idea, ragazzi?Il sensore di prossimità non funziona nel dispositivo iPhone 4

risposta

1

Non c'è niente di sbagliato nel codice (supponendo che abbia implementato proximityChanged: ovviamente). Ho testato il tuo codice su un iPhone 4 e risponde alla mia mano che si muove davanti al sensore di prossimità.

Forse l'hardware è leggermente diverso sul 3GS, il che significa che è più sensibile a quello che stai facendo? Puoi provare un altro dispositivo iPhone 4 (o almeno verificare che il sensore di prossimità funzioni, ad esempio utilizzando l'app del telefono)?

0

si dovrebbe sempre verificare se il particolare dispositivo ha sensore di prossimità o meno. Non tutti i dispositivi iOS hanno sensori di prossimità.

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

Questo codice controlla se il dispositivo è vicino a qualcosa ('proximityState'), non se esiste (' isProximityMonitoringEnabled'). –

2

Posso vedere alcuni problemi con questo codice. La prima è che si utilizza

name:@"UIDeviceProximityStateDidChangeNotification" 

invece di

name:UIDeviceProximityStateDidChangeNotification 

Entrambi i lavori, ma utilizzando la versione nuda vi darà un errore di compilazione se si commette un errore di battitura. (Si vuole ottenere un errore del compilatore con errori di battitura, previene errori silenziosi).

La prossima cosa è che in realtà non stai verificando che il sensore di prossimità sia disponibile prima di aggiungere la notifica. Il tuo codice:

BOOL state = device.proximityState 

Ma questo controlla solo se il dispositivo è vicino o meno agli utenti. Quello che vuoi veramente è impostare proximityEnabled su YES, quindi verificare che sia effettivamente impostato. È un po 'controintuitivo.

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

Ecco un esempio di codice completo:

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

di Apple Documenti:.. "Non tutti i dispositivi iOS sono dotati di sensori di prossimità Per determinare se il monitoraggio di prossimità è disponibile, tentare di abilitarla Se il valore della proprietà proximityMonitoringEnabled rimane NO, il monitoraggio della prossimità non è disponibile. "