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 中,当我从上方悬停对象时,传感器(屏幕)没有被检测到。任何想法伙计们?

4

5 回答 5

2

我可以看到这段代码存在一些问题。第一个是你使用

 name:@"UIDeviceProximityStateDidChangeNotification"

代替

name:UIDeviceProximityStateDidChangeNotification

两者都可以,但是如果你打错了,使用裸版本会给你一个编译器错误。(你想得到一个带有拼写错误的编译器错误,它可以防止静默错误)。

接下来的事情是,在添加通知之前,您实际上并没有检查接近传感器是否可用。你的代码:

BOOL state = device.proximityState

但这只是检查设备是否靠近用户的脸。你真正想要的是设置proximityEnabledYES,然后检查它是否真的设置好了。这有点违反直觉。

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");
}
于 2013-03-01T12:57:28.593 回答
2

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

于 2013-08-13T13:58:13.380 回答
1

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

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

于 2012-03-26T05:32:17.320 回答
1

看看这个:

http://developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/UIDevice_Class/Reference/UIDevice.html

于 2012-03-29T13:54:20.453 回答
0

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

BOOL state = device.proximityState;
if(state)
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(proximityChanged:) 
                                         name:@"UIDeviceProximityStateDidChangeNotification" object:nil];
else
    NSLog(@"NO");
于 2012-03-30T16:47:34.020 回答