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

En el iPhone 3GS o anterior proximityChanged: método se llama éxito pero en el iPhone 4, mientras yo estoy rondando objeto desde arriba del sensor (pantalla) no es ser detectado. Alguna idea, chicos?sensor de proximidad no está funcionando en el iPhone 4 dispositivo de

Respuesta

1

No hay nada de malo en su código (suponiendo que implementó proximityChanged: por supuesto). Probé tu código en un iPhone 4 y responde cuando mi mano se mueve frente al sensor de proximidad.

Tal vez el hardware es ligeramente diferente en el 3GS, lo que significa que es más sensible a lo que está haciendo? ¿Puedes probar con un dispositivo iPhone 4 diferente (o al menos verificar que el sensor de proximidad funcione, por ejemplo, usando la aplicación del teléfono)?

0

siempre se debe comprobar si el dispositivo particular tiene un sensor de proximidad o no. No todos los dispositivos iOS tienen sensores de proximidad.

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

Este código verifica si el dispositivo está cerca de algo ('proximityState'), no si existe (' isProximityMonitoringEnabled'). –

2

Puedo ver algunos problemas con este código. La primera es que se utiliza

name:@"UIDeviceProximityStateDidChangeNotification" 

en lugar de

name:UIDeviceProximityStateDidChangeNotification 

Tanto trabajo, pero utilizando la versión desnuda le dará un error de compilación si comete un error tipográfico. (Desea obtener un error de compilación con errores ortográficos, evita errores silenciosos).

Lo siguiente es que en realidad no está verificando si el sensor de proximidad está disponible antes de agregar la notificación. Su código:

BOOL state = device.proximityState 

Pero esto solo comprueba si el dispositivo está cerca de la cara del usuario o no. Lo que realmente desea es establecer proximityEnabled en YES, luego verifique que realmente se configuró. Es un poco contrario a la intuición.

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

Aquí está un ejemplo de código 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

de Apple Docs:.. "No todos los dispositivos IOS tienen sensores de proximidad para determinar si el monitoreo de proximidad está disponible, intento para permitirle Si el valor de la propiedad proximityMonitoringEnabled permanece NO, la supervisión de proximidad no está disponible. "

Cuestiones relacionadas