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

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

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

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

13 ответов

Решение

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

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

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

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

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

[UIApplication sharedApplication].statusBarOrientation = UIInterfaceOrientationLandscapeLeft;

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

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

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

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

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];

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

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

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

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

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

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

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

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

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

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


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

Эти датчики приближения в основном представляют собой матрицу проводников. Вертикальные "провода" - это дорожки на одной стороне тонкого листа изолятора, горизонтальные - на другой стороне. Пересечения функционируют как конденсаторы. Ваш палец несет электростатический заряд, поэтому емкость каждого соединения изменяется в зависимости от близости. Полевые транзисторы усиливают сигнал, а смещение устанавливает порог. На практике схема является более сложной, чем эта, потому что она должна обнаруживать относительные изменения и подавлять шум.

Но в любом случае, сенсорная сетка говорит вам, что эффект поля был обнаружен, и этот эффект поля характерен для объекта размером с кончик пальца и лежит на поверхности дисплея. Центроид емкостного возмущения вычисляется (вероятно, аппаратно), а координаты (предположительно) сообщаются как числа на порте, наиболее вероятно, доведенные до сведения ОС устройства прерыванием. В чем-то столь же сексуальном, как iPhone, вероятно, есть буфер из последних дюжин позиций, так что он может определить направление и скорость. Вероятно, они также вычисляются аппаратно и представлены в виде чисел на том же порту.

@Dipak Patel & @Coderer

Вы можете загрузить рабочий код по адресу http://spazout.com/google_cheats_independent_iphone_developers_screwed

Он имеет рабочую реализацию близости StateChanged недокументированный метод в UIApplication.

Надеюсь это поможет.

Чтобы выключить экран, можно использовать более одного датчика, чтобы выяснить, должен ли экран быть выключен или нет. Инфракрасный датчик приближения, описанный Cryptognome в сочетании с сенсором сенсорного экрана, описанным Питером Воне, может сработать, если iphone держат близко к лицу (или что-то еще с небольшим электрическим зарядом), или если он просто очень близко к чему-то в -animate.

Другие вопросы по тегам