iPhone SDK可以利用iPhone的接近传感器吗?如果是这样,为什么没有人利用它们呢?我可以想象一些不错的用途。
例如,在赛车游戏中,您可以将手指放在接近传感器上,而不是用拇指占据屏幕空间。当然,如果这是您唯一的选择,那么iPod touch用户将无法使用该应用程序。
接近传感器是否能说明你有多近,或者只是在它前面有什么东西?
答案 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,你可以在这里阅读我的文章,获取访问权限:
答案 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。