Датчик приближения iPhone - PullRequest
       55

Датчик приближения iPhone

20 голосов
/ 03 октября 2008

Может ли iPhone SDK использовать датчики приближения iPhone? Если так, то почему никто не воспользовался ими? Я мог бы представить несколько приличных применений.

Например, в гоночной игре вы можете положить палец на датчик приближения вместо того, чтобы поднимать экран большим пальцем. Хотя, конечно, если бы это был ваш единственный вариант, пользователи iPod touch не смогли бы использовать приложение.

Датчик приближения показывает, насколько вы близко, или просто что-то перед ним?

Ответы [ 13 ]

32 голосов
/ 19 ноября 2008

Там является публичным API для этого. - [UIApplication setProximitySensingEnabled: (BOOL)] включит функцию. Кстати, кажется, что он не использует датчик освещенности, потому что в темной комнате чувствительность приближения может быть настроена.

Однако вызов API в основном закрывает экран, когда вы подносите телефон к лицу. К сожалению, бесполезно для взаимодействия.

17 голосов
/ 03 октября 2008

Предполагая, что вы имеете в виду датчик, который отключает экран, когда вы подносите его к уху, я уверен, что это всего лишь инфракрасный датчик внутри динамика. Если вы запустите приложение телефона (вам не нужно звонить) и удержите что-то, чтобы отбрасывать тень на динамик уха, вы можете отключить дисплей.

Когда вы задали этот вопрос, он не был доступен через публичный API. Теперь вы можете получить доступ к состоянию датчика через свойство proximityState UIDevice. Тем не менее, это не было бы так полезно для игр, так как это всего лишь функция включения / выключения, а не ближняя / дальняя мера. Кроме того, он доступен только на iPhone, а не на iPod touch.

7 голосов
/ 22 июля 2009

Очевидно, что датчик приближения никогда не включится, если строка состояния находится в горизонтальной ориентации. т.е. если вы звоните:

[UIApplication sharedApplication].statusBarOrientation = UIInterfaceOrientationLandscapeLeft;

Вы больше не будете получать уведомления о близости : ON .

Это определенно происходит в OS 3.0, я не могу протестировать его на устройстве 2.X, поскольку у меня его нет с датчиком приближения.

Это похоже на ошибку.

5 голосов
/ 25 сентября 2011

Просто обновить, это возможно.

device = [UIDevice currentDevice];

// Turn on proximity monitoring
[device setProximityMonitoringEnabled:YES];

// To determine if proximity monitoring is available, attempt to enable it.
// If the value of the proximityMonitoringEnabled property remains NO, proximity
// monitoring is not available.

// Detect whether device supports proximity monitoring
proxySupported = [device isProximityMonitoringEnabled];

// Register for proximity notifications
[notificationCenter addObserver:self selector:@selector(proximityChanged:) name:UIDeviceProximityStateDidChangeNotification object:device];

Как указывает Бензадо, вы можете использовать:

// Returns a BOOL, YES if device is proximate
[device proximityState];
5 голосов
/ 18 сентября 2009

Существует большая путаница между датчиком приближения и датчиком внешней освещенности. У iPhone есть оба. Touch не имеет датчика приближения, что делает его плохим выбором для пользовательского ввода. В любом случае, это была бы плохая идея, поскольку Apple не обязана размещать ее в том же месте в будущих устройствах; Вы не должны знать или заботиться, где это.

Датчик приближения работает, пульсируя инфракрасный светодиод и измеряя величину отражательной способности. Это можно увидеть с помощью камеры iSight (большинство цифровых камер чувствительны к инфракрасному излучению.) Просто запустите Photo Booth, инициируйте вызов (или воспроизведите голосовую почту) на телефоне и направьте его на камеру iSight. Обратите внимание на мигающий свет рядом с наушником; закройте его пальцем, и экран станет черным.

API датчика внешнего освещения на данный момент явно закрыт.

5 голосов
/ 29 декабря 2008

Датчик приближения работает посредством измерения ИК-отражения. Если вы поднесете iPhone к веб-камере, вы увидите маленький пульсирующий ИК-светодиод.

2 голосов
/ 30 декабря 2011

Очевидно, что датчик приближения никогда не включится, если строка состояния находится в горизонтальной ориентации. т.е. если вы звоните: [UIApplication sharedApplication] .statusBarOrientation = UIInterfaceOrientationLandscapeLeft; Вы больше не получите близость: ON уведомления. Это определенно происходит в OS 3.0, я не могу протестировать его на устройстве 2.X, так как у меня его нет с датчиком приближения. Это похоже на ошибку. ответил 22 июля 2009 в 5:49 Кевин Ламберт


Я тоже решил эту проблему. Мне потребовалось много времени, чтобы выяснить настоящую причину того, почему датчик приближения не работает. Когда ориентацией является UIInterfaceOrientationLandscapeLeft или UIInterfaceOrientationLandscapeRight, датчик приближения не работает; в то время как в портретном режиме это работает хорошо. Мой iPhone - это iPhone 4S (iOS SDK 5.0).

2 голосов
/ 02 июня 2011

Если вы не нацелены на AppStore, вы можете прочитать мои статьи здесь о том, как получить к ним доступ:

Датчик приближения: http://iphonedevwiki.net/index.php/AppleProxShim

Датчик внешней освещенности: http://iphonedevwiki.net/index.php/AppleISL29003

2 голосов
/ 06 июля 2009

В iPhone 3.0 есть официальная поддержка датчика приближения. Посмотрите на UIDevice proximityMonitoringEnabled в документации.

2 голосов
/ 03 октября 2008

Для этого нет общедоступного API.

...