방위각을 구하기 위해서 센서 사용 테스트 겸 아래와 같은 프로그램을 짰습니다.
x,y,z 세 값만 출력하기 위해 main.xml 에 TextView 세개를 두었구요.
숫자가 나오기는 하는데....
레퍼런스에 SensorEvent 부붙 찾아보면 value[0]은 방위각 [1]은 피치, [2]는 롤 이라고 되어있는데...
피치, 롤은 얼추 맞게 나오는것 같은데... 방위각이 영 이상하게 나오네요...
방위각이 폰을 바닥에 놓고 뱅뱅 돌리면 0~360 까지 변해야 한다고 생각하는데...
설명에도 0은 북 90는 동 180은 남 270은 서 라고 되어있는데...
이게 아무리 돌려도 270~360 정도밖에 움직이질 않습니다.
다운 받아뒀던 나침반 앱을 돌려봐도 그렇군요. 그런데 나침반 앱은 바늘은 방위를 제대로 표시하네요...ㅡㅡ;;;
제가 뭘 잘못했거나 빠뜨린게 있는지 한번만 봐주시고 조언해 주셨으면 합니다.
테스트에 사용중인 폰은 T-Mobile G1 이고 안드로이드 1.6 버전으로 짰습니다.
감사합니다.

-------------------------------------------------------------
package com.test;

import android.app.Activity;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;

public class OrientationTest extends Activity {
    /** Called when the activity is first created. */

private Toast msgToast;
private SensorManager sm;
private SensorEventListener smListener;
private TextView text_x;
private TextView text_y;
private TextView text_z;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        text_x = (TextView)findViewById(R.id.axis_x);
        text_y = (TextView)findViewById(R.id.axis_y);
        text_z = (TextView)findViewById(R.id.axis_z);
        
        sm = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
        smListener = new testListener();
        sm.registerListener(
         (SensorEventListener) smListener,
         sm.getDefaultSensor(Sensor.TYPE_ORIENTATION),
         SensorManager.SENSOR_DELAY_FASTEST);
    }
 
    @Override
    protected void onStop() {
     super.onStop();
     sm.unregisterListener(smListener);
    }
    
    @Override
    protected void onResume() {
     super.onResume();
        sm.registerListener(
         (SensorEventListener) smListener,
         sm.getDefaultSensor(Sensor.TYPE_ORIENTATION),
         SensorManager.SENSOR_DELAY_NORMAL);    
    }
    
    @Override
    protected void onDestroy() {
     super.onDestroy();
     sm.unregisterListener(smListener);
    }
    
    // 여기 리스너를 재정의 해서 사용했습니다.
    // 여기서 x,y,z 값을 받아 출력만 하는데... 왜 저런 희안한 결과가 나오는지 모르겠습니다.
    private class testListener implements SensorEventListener{
     @Override
     public void onSensorChanged(SensorEvent event) {
     if(event.sensor.getType() == Sensor.TYPE_ORIENTATION){
     TextOut("in ORIENTATION");
     text_x.setText(Float.toString(event.values[0]));
     text_y.setText(Float.toString(event.values[1]));
     text_z.setText(Float.toString(event.values[2]));
     }
     }

     @Override
     public void onAccuracyChanged(Sensor sensor, int accuracy) {
     // TODO Auto-generated method stub
     }
    }

    // 확인용 토스트를 사용하기 위한 함수.
    public void TextOut(String str){
     if(msgToast == null){
     msgToast = Toast.makeText(OrientationTest.this, str, Toast.LENGTH_SHORT);
     }else{
     msgToast.setText(str);
     }
     msgToast.show();
    }
}

================================================