Android のセンサ

Android に搭載されているセンサは以下のとおり(Android 2.2 (API level 8) 現在):
(もちろん,機種ごとに実装が異なる)

android.hardware.Sensor.TYPE_ORIENTATION 方位(傾き)センサ
android.hardware.Sensor.TYPE_ACCELEROMETER 加速度センサ
android.hardware.Sensor.TYPE_TEMPERATURE 温度センサ
android.hardware.Sensor.TYPE_MAGNETIC_FIELD 磁場センサ
android.hardware.Sensor.TYPE_LIGHT 光センサ
android.hardware.Sensor.TYPE_PROXIMITY 近接センサ
android.hardware.Sensor.TYPE_GYROSCOPE ジャイロスコープ
android.hardware.Sensor.TYPE_PRESSURE 加圧センサ

なお,2.2 より TYPE_ORIENTATION は非推奨となり,加速度センサと磁場センサを用いて傾きを検出することが推奨されている.

  • HTC Desire (SoftBank X06HT)に搭載されているセンサ:加速度,磁場,方位,近接,光の5種類.
  • Camangi FM600 に搭載されているセンサ:加速度,磁場,方位,光の4種類.

Camangi FM600 は折角,Android 2.2 を載せているのにケチってしまいましたね(^^)

端末に搭載されているセンサ一覧を表示するプログラムを以下に示す.

package jp.android.hellosensor;

import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
import android.hardware.SensorManager;	//センサー管理用
import android.hardware.Sensor;	//センサー管理用

public class HelloSensorActivity extends Activity {
  //センサー情報表示用テキストビュー
  TextView mStatusText;
	
  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    mStatusText = (TextView)findViewById(R.id.statuslines);
  }
    
  @Override
  public void onResume(){
    super.onResume();
        
    StringBuffer buff = new StringBuffer();

    //センサー管理
    SensorManager sm = (SensorManager)getSystemService(SENSOR_SERVICE);
    List<Sensor> sensors = sm.getSensorList(Sensor.TYPE_ALL);	//搭載されているセンサー情報を取得
  
    buff.append("搭載されているセンサ:\n");
        
    for(Sensor sensor: sensors){
      int sensorType = sensor.getType();
        switch(sensorType){
        case Sensor.TYPE_ORIENTATION:    buff.append("方位(傾き)センサ\n"); break;
        case Sensor.TYPE_ACCELEROMETER:  buff.append("加速度センサ\n");       break;
        case Sensor.TYPE_TEMPERATURE:    buff.append("温度センサ\n");         break;
        case Sensor.TYPE_MAGNETIC_FIELD: buff.append("磁場センサ\n");         break;
        case Sensor.TYPE_LIGHT:          buff.append("光センサ\n");           break;
        case Sensor.TYPE_PROXIMITY:      buff.append("近接センサ\n");         break;
        case Sensor.TYPE_GYROSCOPE:      buff.append("ジャイロスコープ\n");   break;
        case Sensor.TYPE_PRESSURE:       buff.append("加圧センサ\n");         break;
        default:                         buff.append("unknown sensor\n");     break;
        }
    }

    mStatusText.setText(buff.toString());
  }
}