iPhone接近传感器
iPhone SDK能否利用iPhone的接近传感器?如果是这样,为什么没有人利用它们?我可以想象一些像样的用途 例如,在赛车游戏中,您可以将手指放在接近传感器上,而不是用拇指占据屏幕的不动产。当然,如果这是你唯一的选择,那么iPodtouch用户将无法使用该应用程序iPhone接近传感器,iphone,api,sensors,proximity,Iphone,Api,Sensors,Proximity,iPhone SDK能否利用iPhone的接近传感器?如果是这样,为什么没有人利用它们?我可以想象一些像样的用途 例如,在赛车游戏中,您可以将手指放在接近传感器上,而不是用拇指占据屏幕的不动产。当然,如果这是你唯一的选择,那么iPodtouch用户将无法使用该应用程序 接近传感器是否会告诉你离得有多近,或者只是有东西在它前面?没有公开的API 这些接近传感器基本上是导体矩阵。垂直的“电线”是一片薄绝缘体一侧的轨道,水平的在另一侧。交叉点起电容器的作用。你们的手指带有静电电荷,所以每个结的电容会随
接近传感器是否会告诉你离得有多近,或者只是有东西在它前面?没有公开的API 这些接近传感器基本上是导体矩阵。垂直的“电线”是一片薄绝缘体一侧的轨道,水平的在另一侧。交叉点起电容器的作用。你们的手指带有静电电荷,所以每个结的电容会随着距离的变化而变化。场效应晶体管放大信号,偏置设置阈值。实际上,电路比这更复杂,因为它必须检测相对变化并抑制噪声
但无论如何,传感器网格告诉你的是,已经感应到了场效应,场效应是物体的特征,大约指尖大小,位于显示器表面。电容性干扰的质心(可能由硬件计算),坐标(可能)报告为端口上的数字,最有可能通过中断引起设备操作系统的注意。在像iPhone这样性感的东西中,可能会有一个缓冲区,缓冲最后十几个位置,这样它就可以计算出方向和速度。可能这些也由硬件计算,并在同一端口上以数字显示。假设你指的是当你将屏幕放在耳朵上时关闭屏幕的传感器,我很确定它只是耳朵扬声器内的红外传感器。如果你启动手机应用程序(你不必打电话)并拿着东西在耳朵扬声器上投下阴影,你可以关闭显示器 当您提出此问题时,无法通过公共API访问它。现在,您可以通过UIDevice的
proximityState
属性访问传感器的状态。然而,它对游戏来说并没有多大用处,因为它只是一个开/关的东西,而不是一个近/远的度量。另外,它仅在iPhone上可用,而在iPod touch上不可用。有一个用于此的公共API-[UIApplication setProximitySensingEnabled:(BOOL)]将打开该功能。顺便说一句,它似乎没有使用光传感器,因为近距离感应将在黑暗的房间中进行调整
但是,当您将手机举到脸上时,API调用基本上会使屏幕空白。遗憾的是,这对互动毫无用处。@Dipak Patel和编码器 您可以在以下位置下载工作代码: 它有一个ProximityState的工作实现,改变了UIApplication中未记录的方法
希望这能有所帮助。接近传感器通过测量红外反射率工作。如果你把iPhone举到网络摄像头前,你可以看到一个小的脉冲红外LED 在iPhone 3.0中,官方支持接近传感器。查看文档中的“设备近邻监控已启用”。显然,如果状态栏处于横向,则近邻传感器将永远不会打开。 i、 e.如果你打电话:
[UIApplication sharedApplication].statusBarOrientation = UIInterfaceOrientationLandscapeLeft;
您将不再获得通知上的邻近提示
这肯定发生在OS3.0上,我不能在2.X设备上测试它,因为我没有一个带有接近传感器的设备
这似乎是一个错误。在接近传感器和环境光传感器之间存在很多混淆。iPhone兼具这两个功能。触摸屏没有接近传感器,这使得它对于用户输入来说是一个糟糕的选择。无论如何,这将是一个坏主意,因为苹果没有义务在未来的设备中把它放在同一个地方;你不应该知道或关心它在哪里
接近传感器的工作原理是脉冲红外LED并测量反射率。您可以使用iSight相机看到这一点(大多数数码相机对红外很敏感)。只需启动Photo Booth,启动电话(或播放语音邮件)并将其指向iSight相机即可。注意听筒旁边的闪光灯;用手指盖住它,屏幕就会变黑
此时,环境光照传感器的API显然是私有的。要关闭屏幕,可以想象使用多个传感器来确定是否应关闭屏幕。Cryptognome描述的红外近距离传感器与Peter Wone描述的触摸屏传感器相结合,可以确定iphone是否靠近你的脸(或其他带有轻微电荷的东西),或者它是否只是非常接近animate中的某个东西。如果你不是针对AppStore,您可以在这里阅读我关于访问这些内容的文章: 接近传感器:
环境光照传感器:仅需更新即可
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];
显然,如果状态栏处于横向,接近传感器将永远不会打开。 i、 e.如果你打电话: [UIApplication sharedApplication].StatusBaroOrientation=UIInterfaceOrientation和ScapeLeft; 您将不再获得通知上的“接近度”。 这肯定发生在OS3.0上,我不能在2.X设备上测试它,因为我没有一个带有接近传感器的设备。 这好像是一个错误。 于2009年7月22日5:49回答 凯文兰伯特
我也遇到过这个问题。我花了很长时间才找出接近传感器不工作的真正原因。当方向为UIInterfaceOrientation和SCAPELEFT或UIInterfaceOrientation和SCAPERIGHT时,接近传感器不工作;在纵向模式下,它工作得很好。我的iPhone是iPhone 4S(iOS SDK 5.0)。听起来你在描述触摸屏,而不是接近传感器(当你拿着手机时,它会关闭屏幕)