2015-12-14 32 views
0

我正在製作一個應用程序,使用兩個傳感器。如何在傳感器上使用onAccuracyChanged功能

  1. TYPE_MAGNETIC_FIELD
  2. TYPE_GRAVITY

我初始化各自的傳感器,然後在onSensorChanged功能,我獲取數據,做在同一個計算。

我有一個簡單的問題,我如何使用onAccuracyChanged函數來過濾數據?我想要中等和高精度的數據!

我打印基本的聲明,看看在調試應用程序時獲得什麼樣的準確性。

代碼:

`@Override 
    public void onAccuracyChanged(Sensor sensor, int accuracy) { 
     // Do something here if sensor accuracy changes. 
     // You must implement this callback in your code. 
     // I initialized mValuen as mValuen = mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD); 

     if (sensor == mValuen) { 
      switch (accuracy) { 
       case 0: 
        System.out.println("Unreliable"); 
        break; 
       case 1: 
        System.out.println("Low Accuracy"); 
        break; 
       case 2: 
        System.out.println("Medium Accuracy"); 
        break; 
       case 3: 
        System.out.println("High Accuracy"); 
        break; 
      } 
     } 
    }` 

按我的理解,當一個傳感器報告一個新值onSensorChanged函數被調用。所以我不能明確地調用這個函數(即使我可以,只要傳感器報告一個新的值就會被調用)。

我所有的計算都在這個函數中。如何過濾中等和高精度的數據。謝謝。

回答

0

檢查this我的答案更詳細的答案。

假設這是onAccurayChanged函數。

public void onAccuracyChanged(Sensor sensor, int accuracy) { 
     // Do something here if sensor accuracy changes. 
     // You must implement this callback in your code. 
     if (sensor == mValuen) { 
      switch (accuracy) { 
       case 0: 
        System.out.println("Unreliable"); 
        con=0; 
        break; 
       case 1: 
        System.out.println("Low Accuracy"); 
        con=0; 
        break; 
       case 2: 
        System.out.println("Medium Accuracy"); 
        con=1; 

        break; 
       case 3: 
        System.out.println("High Accuracy"); 
        con=1; 
        break; 
      } 
     } 
    } 

我宣佈一個全局變量,並保持它爲0 而在onSensorChanged功能,我在哪裏做所需的計算,我把一個if..else條件。如果con的值是1,那麼只有在做計算。 正在輸出。但請告訴我,如果我的方法在某種方式或其他方面是錯誤的。 謝謝。

相關問題