2011-09-27 61 views
4

我正在爲Android編寫遊戲,並希望能夠使用加速度計進行輸入。Android SensorManager中的getSensorList()與getDefaultSensor()

我看到兩種獲取傳感器的方法,一種方法是使用SensorManager.getSensorList(Sensor.TYPE_ACCELEROMETER)的第一個元素,另一種方法是SensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER)

getDefaultSensor doc說它可能會返回一個「複合」傳感器,所以如果我想要一個「原始」傳感器,我應該使用getSensorList

任何想法複合或原始傳感器之間的區別是什麼?這甚至適用於加速度計嗎?任何人都有使用包含多個或複合加速度計的設備的經驗? (或者其他一些傳感器?)

回答

3

谷歌的文檔比他們在這裏的實現領先。我通過code repository瀏覽(這似乎是2.3.1-ISH源),並發現:

public Sensor getDefaultSensor(int type) { 
    // TODO: need to be smarter, for now, just return the 1st sensor 
    List<Sensor> l = getSensorList(type); 
    return l.isEmpty() ? null : l.get(0); 
} 

所以沒有真正的區別(我不認爲他們真的可以添加一個更高版本)的傳感器之間從getDefaultSensor()getSensorList()返回。

+0

不再更新。見下文。 –

3

更新: 他們在棒棒糖更新getDefaultSensor方法,現在是有區別的:

public Sensor getDefaultSensor(int type) { 
    // TODO: need to be smarter, for now, just return the 1st sensor 
    List<Sensor> l = getSensorList(type); 
    boolean wakeUpSensor = false; 
    // For the following sensor types, return a wake-up sensor. These types are by default 
    // defined as wake-up sensors. For the rest of the SDK defined sensor types return a 
    // non_wake-up version. 
    if (type == Sensor.TYPE_PROXIMITY || type == Sensor.TYPE_SIGNIFICANT_MOTION || 
      type == Sensor.TYPE_TILT_DETECTOR || type == Sensor.TYPE_WAKE_GESTURE || 
      type == Sensor.TYPE_GLANCE_GESTURE || type == Sensor.TYPE_PICK_UP_GESTURE) { 
     wakeUpSensor = true; 
    } 

    for (Sensor sensor : l) { 
     if (sensor.isWakeUpSensor() == wakeUpSensor) return sensor; 
    } 
    return null; 
} 

因此,如果有可用的指定類型的多個傳感器,getDefaultSensor會返回一個非喚醒版本(除非默認類型是上述那些實際上6定義爲喚醒傳感器中的一個)

順便提一下,Sensor.TYPE_TILT_DETECTOR,Sensor.TYPE_WAKE_GESTURE,Sensor.TYPE_GLANCE_GESTURE和Sensor.TYPE_PICK_UP_GESTURE都隱藏在SDK,因爲它們旨在僅用於系統UI。 Sensor.java源代碼中有更多詳細信息

相關問題