iPhone接近传感器

时间:2008-10-03 03:06:12

标签: iphone api sensor proximity

iPhone SDK可以利用iPhone的接近传感器吗?如果是这样,为什么没有人利用它们呢?我可以想象一些不错的用途。

例如,在赛车游戏中,您可以将手指放在接近传感器上,而不是用拇指占据屏幕空间。当然,如果这是您唯一的选择,那么iPod touch用户将无法使用该应用程序。

接近传感器是否能说明你有多近,或者只是在它前面有什么东西?

13 个答案:

答案 0 :(得分:32)

是一个公共API。 - [UIApplication setProximitySensingEnabled:(BOOL)]将打开该功能。顺便说一句,它似乎没有使用光传感器,因为接近感应会在黑暗的房间里调整。

但是,当您将手机拿到脸上时,API调用基本上会使屏幕空白。遗憾的是,对交互没用。

答案 1 :(得分:17)

假设你的意思是当你把它拿到耳边时关闭屏幕的传感器,我很确定这只是耳机内的红外传感器。如果您启动手机应用程序(您不必打电话)并拿着一些东西在耳机上投下阴影,您可以关闭显示屏。

当您提出此问题时,无法通过公共API访问该问题。您现在可以通过UIDevice的proximityState属性访问传感器的状态。然而,它对游戏来说并不是那么有用,因为它只是一个开/关的东西,而不是近/远的衡量标准。此外,它仅适用于iPhone,而不适用于iPod touch。

答案 2 :(得分:7)

如果状态栏处于横向,显然接近传感器将永远不会打开。 即,如果你打电话:

[UIApplication sharedApplication].statusBarOrientation = UIInterfaceOrientationLandscapeLeft;

您将不再获得 proximity:ON 通知。

这绝对发生在OS 3.0上,我无法在2.X设备上进行测试,因为我没有配备接近传感器。

这似乎是一个错误。

答案 3 :(得分:5)

接近传感器通过测量红外反射来工作。如果您将iPhone连接到网络摄像头,您可以看到一个小的脉冲红外LED。

答案 4 :(得分:5)

接近传感器和环境光传感器之间存在很多混淆。 iPhone同时拥有。 Touch没有接近传感器,因此用户输入的选择较差。无论如何,这将是一个坏主意,因为Apple没有义务在未来的设备中将它放在同一个地方;你不应该知道或关心它在哪里。

接近传感器通过脉冲红外LED并测量反射量来工作。你可以使用你的iSight摄像头看到这一点(大多数数码相机都对IR很敏感。)只需启动Photo Booth,在手机上发起呼叫(或播放语音信箱)并将其指向iSight摄像头。注意耳机旁边的闪光灯;用手指遮住它,屏幕会变黑。

此时环境光传感器的API显然是私密的。

答案 5 :(得分:5)

只是为了更新,这是可能的。

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

答案 6 :(得分:2)

此处没有公共API。

答案 7 :(得分:2)

在iPhone 3.0中,官方支持接近传感器。请查看文档中的UIDevice proximityMonitoringEnabled

答案 8 :(得分:2)

如果你不是针对AppStore,你可以在这里阅读我的文章,获取访问权限:

接近传感器:http://iphonedevwiki.net/index.php/AppleProxShim

环境光线传感器:http://iphonedevwiki.net/index.php/AppleISL29003

答案 9 :(得分:2)

显然,如果状态栏处于横向,接近传感器将永远不会打开。 即如果你打电话: [UIApplication sharedApplication] .statusBarOrientation = UIInterfaceOrientationLandscapeLeft; 您将不再接近:ON通知。 这肯定发生在OS 3.0上,我无法在2.X设备上进行测试,因为我没有接近传感器。 这似乎是一个错误。 回答于2009年7月22日5:49 凯文兰伯特


我也遇到过这个问题。我花了很长时间才弄清楚接近传感器无法正常工作的真正原因。当方向是UIInterfaceOrientationLandscapeLeft或UIInterfaceOrientationLandscapeRight时,接近传感器不起作用;在纵向模式下它运作良好。我的iPhone是iPhone 4S(iOS SDK 5.0)。

答案 10 :(得分:1)

这些接近传感器基本上是导体矩阵。垂直“导线”是薄片绝缘体一侧的轨道,水平的导线位于另一侧。交叉点用作电容器。你的手指带有静电电荷,因此每个连接点的电容会随着接近而变化。 FET放大信号并偏置设置阈值。在实践中,电路比这更复杂,因为它必须检测相对变化并抑制噪声。

但无论如何,传感器网格告诉你的是,已经感知到场效应,并且该场效应是关于指尖大小并停留在显示器表面上的对象的特征。计算容性扰动的质心(可能是通过硬件),并且(可能)将坐标报告为最可能通过中断引起设备OS注意的端口上的数字。在像iPhone一样性感的东西中,可能会有最后十几个位置的缓冲区,因此可以确定方向和速度。可能这些也是由硬件计算出来的,并在同一端口上显示为数字。

答案 11 :(得分:0)

@Dipak Patel& @Coderer

您可以在下载工作代码 http://spazout.com/google_cheats_independent_iphone_developers_screwed

它在UIApplication中有一个localStateChanged的工作实现,是一个未记录的方法。

希望这有帮助。

答案 12 :(得分:0)

要关闭屏幕,可以想象使用多个传感器来判断屏幕是否应该关闭。 Cryptognome描述的IR接近传感器与Peter Wone描述的触摸屏传感器一起可以解决,如果iphone靠近你的脸(或其他带有轻微电荷的东西),或者它只是非常靠近-animate。