Android onSensorChanged水平センシング(TYPE_ORIENTATION)の方向

1388 ワード


public void onSensorChanged(SensorEvent event) {

	if (event.sensor.getType() != Sensor.TYPE_ORIENTATION
			|| event.values.length < 3)

		return;

	long currentTime = System.currentTimeMillis();

	if ((currentTime - lastUpdate) > 100) {

		long diffTime = (currentTime - lastUpdate);

		lastUpdate = currentTime;

		float x = event.values[SensorManager.DATA_X];

		float y = event.values[SensorManager.DATA_Y];

		float z = event.values[SensorManager.DATA_Z];

	}

}

   x<0         x>0
                ^
                |
    +-----------+-->  y>0
    |           |
    |           |
    |           |
    |           |  /z<0
    |           | /
    |           |/
    O-----------+/
    |[]  [ ]  []/
    +----------/+     y<0
             /
            /
           |/z>0 (toward the sky)
    O: Origin (x=0,y=0,z=0)
携帯電話が水平になったので、
画面左方向に傾けるevent.values[SensorManager.DATA_Z]が0より大きい
画面の上下に傾けるevent.values[SensorManager.DATA_Y]が0より大きい
Androidの画面が横断幕になっても、上記のルールは同じように適用されます.ただ、画面の左側は短い測定です.
event.values[SensorManager.DATA_X]は画面レベルで、それから南東北西を回るときに変化します.
0=North, 90=East, 180=South, 270=West