4

Android用のゲームを書いていますが、加速度計を入力に使用できるようにしたいと考えています。

センサーを取得する方法は2つあります。1つはの最初の要素を使用する方法で、もう1つSensorManager.getSensorList(Sensor.TYPE_ACCELEROMETER)はですSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER)

getDefaultSensorドキュメントには、「複合」センサーが返される可能性があると記載されているため、「生の」センサーが必要な場合はを使用する必要がありますgetSensorList

コンポジットセンサーと生センサーの違いは何ですか?これは加速度計にも当てはまりますか?複数または複合の加速度計を含むデバイスの経験がある人はいますか?(または他のセンサー?)

4

2 に答える 2

3

Googleのドキュメントは、ここでの実装よりもはるかに進んでいます。コードリポジトリ(2.3.1っぽいソースのようです)を閲覧して、次のことを見つけました:

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()

于 2011-09-29T03:10:30.187 に答える
3

更新:Lollipopの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つのうちの1つでない限り)

ちなみに、Sensor.TYPE_TILT_DETECTOR、Sensor.TYPE_WAKE_GESTURE、Sensor.TYPE_GLANCE_GESTURE、Sensor.TYPE_PICK_UP_GESTUREは、システムUIでのみ使用することを目的としているため、SDKでは非表示になっています。それらの詳細はSensor.javaソースにあります

于 2014-11-28T15:01:19.290 に答える