Proximity Sensor无法在iPhone 4设备中运行

时间:2012-03-22 10:44:26

标签: iphone ios proximitysensor

//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中,当我向上悬停物体时,传感器(屏幕)未被检测到。任何想法的人?

5 个答案:

答案 0 :(得分: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");
}

答案 1 :(得分:2)

Apple Docs:“并非所有iOS设备都有接近传感器。要确定接近监控是否可用,请尝试启用它。如果proximityMonitoringEnabled属性的值保持为NO,则无法进行接近监控。“

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

答案 4 :(得分:0)

您应该始终检查特定设备是否有接近传感器。 并非所有iOS设备都有接近传感器。

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