2009年1月19日月曜日

Android Dev Phone 1 でセンサー入力

android ではセンサー入力が一般化されています。G1では、主に、角度(方位)、加速度センサーの入力です。

Javaからの使い方ですが、implements SensorListener をつけたクラスに、

public void onSensorChanged(int sensor, float[] values) {
}

こういうコールバックを準備しておきます。

あとは、
SensorManager mSensorManager;
mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);

とサービスを取得して、アプリが動作する際には、

mSensorManager.registerListener( _view, // SensorListener をつけたクラス
SensorManager.SENSOR_ALL,   // センサーの種類に応じて
SensorManager.SENSOR_DELAY_GAME);  // 目的に応じて

を呼びます。

必要ないときは、

mSensorManager.unregisterListener( _view );

でリリースしておくようです。

G1 で動いているセンサーの値は、

SENSOR_ORIENTATION
SENSOR_ACCELEROMETER
SENSOR_MAGNETIC_FIELD

の3種類のようです。android としては、これ以外にも、温度やライトのセンサーなども定義されています。

ついでに、定義されている定数がいろいろ。GRAVITY_DEATH_STAR_I って何?

float GRAVITY_DEATH_STAR_I 3.5303614E-7
float GRAVITY_EARTH 9.80665
float GRAVITY_JUPITER 23.12
float GRAVITY_MARS 3.71
float GRAVITY_MERCURY 3.7
float GRAVITY_MOON 1.6
float GRAVITY_NEPTUNE 11.0
float GRAVITY_PLUTO 0.6
float GRAVITY_SATURN 8.96
float GRAVITY_SUN    275.0
float GRAVITY_THE_ISLAND 4.815162
float GRAVITY_URANUS 8.69
float GRAVITY_VENUS 8.87
float LIGHT_CLOUDY 100.0
float LIGHT_FULLMOON 0.25
float LIGHT_NO_MOON 0.0010
float LIGHT_OVERCAST 10000.0
float LIGHT_SHADE 20000.0
float LIGHT_SUNLIGHT 110000.0
float LIGHT_SUNLIGHT_MAX 120000.0
float LIGHT_SUNRISE 400.0
float MAGNETIC_FIELD_EARTH_MAX 60.0
float MAGNETIC_FIELD_EARTH_MIN 30.0


あと、このセンサーは何でしょうか。

public static final int SENSOR_TRICORDER
A constant describing a Tricorder When this sensor is available and enabled, the device can be used as a fully functional Tricorder. All values are returned in SI units.

0 件のコメント: