3

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

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 之间的值吗?

4

2 回答 2

3

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

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

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

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

于 2013-06-01T22:17:22.057 回答
3

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

以下是一些示例:
Motorola 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

于 2015-04-29T21:32:47.890 回答