接近传感器精度

Posted

技术标签:

【中文标题】接近传感器精度【英文标题】:Proximity sensor accuracy 【发布时间】:2013-06-01 19:38:47 【问题描述】:

我正在使用此代码测试接近传感器:

final SensorManager sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
        final Sensor proximitySensor = sensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);
        sensorManager.registerListener(this, proximitySensor, SensorManager.SENSOR_DELAY_FASTEST);

当我的手远离传感器时,我只得到 5.0 的值,而当它完全关闭传感器时,我得到的值为 0.0。 (我在 Nexus S 4.1 上进行测试) 我可以得到 0 到 5 之间的值吗?

【问题讨论】:

【参考方案1】:

在许多设备上,接近传感器本质上是布尔值——“近”(0) 或“远”(5),但这取决于实际使用的接近传感器。

我没有 Nexus S,因此无法验证该设备,但我猜测它与我的三星 GS3 相似,它报告以下信息: 名称:GP2A接近传感器 供应商:夏普 版本:1 功率:0.75 最大范围:5.0 分辨率:5.0

正如您在 GS3 上看到的,分辨率与最大范围相同,因此无论我做什么,我都会得到的唯一值是 0 和 5。

您可以使用'android Sensor Box' 之类的应用或Sensor API 的getMaximumRange() 和getResolution() 方法来检查您自己的设备。

【讨论】:

【参考方案2】:

另外,请注意,每个制造商报告的接近传感器近和远状态的值不同。除此之外,某些智能手机的 getMaximumRange() 返回值远高于 onSensorChanged 中报告的值。因此,您不能依赖电话报告的任何值。我想出的唯一解决方案是监控onSensorChanged中报告的值,并记住最大值,如果该值低于最大值,则表示接近传感器靠近物体。

以下是一些示例: 摩托罗拉 Defy:最低 3,最高 100,getMaximumRange-2.1474836E9 THL T200:最低 0、最高 1、getMaximumRange-1 三星 S5 mini:最低 0、最高 5、getMaximumRange-4096.0 Nexus S、索尼 Z2:最低 0、最高 5、getMaximumRange-5

【讨论】:

以上是关于接近传感器精度的主要内容,如果未能解决你的问题,请参考以下文章

如何检测接近传感器?

覆盖接近传感器时,音频单元增加渲染回调 inNumberFrames

在 Unity 中触发接近传感器时出现问题

iPhone 屏幕睡眠 - 内置接近传感器

在通话期间禁用接近传感器

Android 接近传感器 [独特问题 - 传感器未检测到手机附近已经存在的物体]