【问题标题】:How can I detect if an iPhone OS device has a proximity sensor?如何检测 iPhone OS 设备是否有接近传感器?
【发布时间】:2011-02-04 20:18:53
【问题描述】:

与接近感应相关的文档指出,如果在没有接近感应的设备(例如 iPod touch、iPad)上使用接近感应 API,它们只会返回,就好像接近感应已触发一样。

除了检查 [[UIDevice currentDevice].model] 字符串并解析“iPhone”、“iPod touch”或“iPad”之外,是否有更巧妙的方法来确定给定设备上是否有接近传感器?

【问题讨论】:

    标签: iphone iphone-sdk-3.0


    【解决方案1】:

    取自 UIDevice 文档:

    proximityMonitoringEnabled

    一个布尔值,指示是否 接近监控已启用(是) 与否(否)。

    ...

    讨论

    ....

    并非所有 iPhone OS 设备都有 接近传感器。确定是否 接近监测可用, 尝试启用它。如果值 接近状态属性仍然存在 不,接近监控不是 可用。

    克劳斯

    【讨论】:

      【解决方案2】:

      Apple 的文档指出,“并非所有 iPhone OS 设备都有接近传感器。”要确定您的应用运行的设备是否支持接近监控,请将proximityMonitoringEnabled 属性设置为YES,然后检查其值:

      UIDevice *device = [UIDevice currentDevice];
      device.proximityMonitoringEnabled = YES;
      if (device.proximityMonitoringEnabled == YES)
          // do something
      

      来源:http://www.mobileorchard.com/new-in-iphone-30-tutorial-series-part-4-proximity-detection/

      【讨论】:

      • 文档说:要确定接近监控是否可用,请尝试启用它。如果 {proximityState 属性的值仍然为 NO,则接近监控不可用。但实际上,如果您在传感器前面没有任何东西的情况下启用了proximityState,我不明白这一点......
      • 不直接相关,但从不与YES 进行比较。只需在布尔上下文中评估它,例如 if (device.proximityMonitoringEnabled)
      【解决方案3】:

      也许这个 sn-p 可能会有所帮助:

      -(BOOL) hasProximitySensor {
      
          UIDevice *dev = [UIDevice currentDevice];
          BOOL oldValue = [dev isProximityMonitoringEnabled];
          [dev setProximityMonitoringEnabled:!oldValue];
          BOOL newValue = [dev isProximityMonitoringEnabled];
      
          [dev setProximityMonitoringEnabled:oldValue];
      
          return (oldValue != newValue);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-15
        • 1970-01-01
        • 1970-01-01
        • 2013-02-19
        相关资源
        最近更新 更多