20

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

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

接近传感器是否告诉您离您有多近,或者只是在它前面有什么东西?

4

13 回答 13

32

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

但是,当您将手机举到脸上时,API 调用基本上会使屏幕空白。可悲的是,对交互没有用处。

于 2008-11-19T18:38:34.353 回答
17

假设您的意思是当您将屏幕靠近耳朵时会关闭屏幕的传感器,我很确定这只是耳机内部的红外传感器。如果您启动电话应用程序(您不必打电话)并按住某物在耳机上投下阴影,您可以关闭显示屏。

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

于 2008-10-03T19:41:14.060 回答
8

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

[UIApplication sharedApplication].statusBarOrientation = UIInterfaceOrientationLandscapeLeft;

您将不再收到接近:打开通知。

这肯定发生在 OS 3.0 上,我无法在 2.X 设备上测试它,因为我没有带接近传感器的设备。

这似乎是一个错误。

于 2009-07-22T05:49:39.007 回答
5

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

于 2008-12-28T21:38:58.650 回答
5

接近传感器和环境光传感器之间存在很多混淆。iPhone 两者都有。Touch 没有接近传感器,使其成为用户输入的糟糕选择。无论如何,这将是一个坏主意,因为 Apple 没有义务在未来的设备中将其定位在同一个地方。你不应该知道或关心它在哪里。

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

在这一点上,环境光传感器的 API 显然是私有的。

于 2009-09-17T23:21:24.267 回答
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];

正如 benzado 指出的那样,您可以使用:

// Returns a BOOL, YES if device is proximate
[device proximityState];
于 2011-09-24T22:44:42.200 回答
2

没有用于此的公共 API。

于 2008-10-03T03:09:22.290 回答
2

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

于 2009-07-06T17:59:32.260 回答
2

如果您的目标不是 AppStore,您可以在此处阅读我的文章,了解如何访问这些内容:

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

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

于 2011-06-02T01:52:15.677 回答
2

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


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

于 2011-12-30T08:50:56.147 回答
1

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

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

于 2008-10-03T05:11:34.667 回答
0

@Dipak Patel & @Coderer

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

它有一个在 UIApplication 中未记录的方法的proximityStateChanged 的​​工作实现。

希望这可以帮助。

于 2008-11-20T04:17:55.713 回答
0

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

于 2009-10-03T12:07:38.793 回答