2014-02-11 132 views
2

我正在構建的應用程序使用接近傳感器。嘗試在不同的手機中,我發現接近傳感器在不同的手機中有不同的(最小,最大)值(我的HTC感覺覆蓋0和覆蓋9,而xperia覆蓋0和未覆蓋1)。所以問題是: 如何獲得接近傳感器的最小最大值?Android - 獲取接近傳感器的最小值和最大值

回答

7

我認爲所有設備的接近傳感器的最小值爲0。並獲得最大範圍...

SensorManager sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); 
    Sensor proximitySensor = sensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY); 
    proximitySensor.getMaximumRange(); 
+2

「接近傳感器的最小值爲0」對所有設備均爲真。例如,對於某些「摩托羅拉Moto G」,最小值爲3釐米,最大值爲100釐米 –

4

根據文檔:

Some proximity sensors only support a binary near or far measurement. 
In this case, the sensor should report its maximum range value in the far state 
and a lesser value in the near state 

所以接近傳感器甚至可以沒有最小值和最大值。那麼你應該比較它的價值與proximitySensor.getMaximumRange()

0

每個接近傳感器都不同。您必須監視onSensorChanged()中的值並記住最小值和最大值。它工作正常。這是我的代碼,用於檢查附近的狀態。

private float proximityCalibratedMax = Float.MIN_VALUE; 

    ... 

    public void onSensorChanged(SensorEvent event) { 

      if(event.values[0] > proximityCalibratedMax){ 
       proximityCalibratedMax = event.values[0]; 
      } 

      if (event.sensor.getType() == Sensor.TYPE_PROXIMITY && proximityCalibratedMax != Float.MIN_VALUE) { 
       if (event.values[0] < proximityCalibratedMax) { 
        prevNear = true; 
        sensorTimestamp = new Date().getTime(); 

       } else { 
        long currentTimestamp = new Date().getTime(); 
        prevNear = false; 
        openAutifyCarMode(); 

       } 
      } 
     }