2013-06-01 75 views
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之間的值嗎?

回答

3

在許多設備上,接近傳感器本質上是布爾值 - 'near'(0)或'far'(5),但這取決於實際使用的接近傳感器。

我沒有的Nexus S,所以我無法驗證該設備,但我猜它類似於我的三星GS3,該報告以下信息: 名稱:GP2A接近傳感器 供應商:夏普 版本:1 功率:0.75 最大量程:5.0 分辨率:5.0

正如你可以在GS3看,分辨率是一樣的最大範圍內,所以0和5的值只有我無論我做什麼,我都會得到。

您可以通過使用應用程序'Android Sensor Box'或使用Sensor API的getMaximumRange()和getResolution()方法檢出自己的設備。

3

此外,請注意,每個製造商報告接近傳感器接近和遠端狀態的不同值。除此之外,某些智能手機的getMaximumRange()返回的值比onSensorChanged中報告的值高。所以你不能依賴手機報告的任何值。我提出的唯一解決方案是監視onSensorChanged中報告的值,並記住最高值,如果值低於最高值,則表示接近傳感器接近物體。

下面是一些例子:
摩托羅拉Defy:最低-3,最高-100,getMaximumRange-2.1474836E9
THL T200:最低-0,最高-1,getMaximumRange-1
三星S5迷你:價低0,最高-5,最大範圍-4096.0
Nexus S,索尼Z2:最低-0,最高-5,最大範圍-5,