Я вижу несколько проблем с этим кодом. Во-первых, вы используете
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");
}