직접 갤럭시s 에 테스팅중인데요
우선 맨처음 카메라 프리뷰를 띄우고 그후 센서값을 가져와서 핸드폰이
해당 움직이는 범위 내에서 카메라 화면을 띄우려고 합니다
그런데 문제는 카메라와 센서가 서로 부딫혀서 그런지 실행이 안되서 프로세스 오류 나더군요
특히 오류 시점은 onSensorChanged 에서 에러가 납니다 답답한데 조언좀 구합니다
같이 사용하면 안되는건가요
추가 질문은요 onDraw  와  onSensorChanged 의 호출시점을 알고 싶습니다
답변부탁드립니다 
package com.RVN;

import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.ViewGroup.LayoutParams;

public class main extends Activity implements SensorEventListener{
private SensorManager sensorManager;
private Float[] saveAceelerator;
private Float[] saveOrientation;
private CamView mPreview;
private Points pct;

    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
     requestWindowFeature( Window.FEATURE_NO_TITLE );
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,  
        WindowManager.LayoutParams.FLAG_FULLSCREEN); 
        super.onCreate(savedInstanceState);
        sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
    
        mPreview = new CamView(this);
        pct = new Points(this);
        setContentView(mPreview);
        addContentView(pct, 
         new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
        
    }
    @Override
protected void onResume() {
super.onResume();
sensorManager.registerListener(this, sensorManager
.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
SensorManager.SENSOR_DELAY_FASTEST);
sensorManager.registerListener(this, sensorManager
.getDefaultSensor(Sensor.TYPE_ORIENTATION),
SensorManager.SENSOR_DELAY_FASTEST); 
}
@Override
protected void onStop() {
super.onStop();
sensorManager.unregisterListener(this, sensorManager
.getDefaultSensor(Sensor.TYPE_ACCELEROMETER));
sensorManager.unregisterListener(this, sensorManager
.getDefaultSensor(Sensor.TYPE_ORIENTATION));
}
@Override
public void onSensorChanged(SensorEvent event) 
{/*
synchronized (this) 
{
switch (event.sensor.getType()) 
{
case Sensor.TYPE_ACCELEROMETER:
saveAceelerator[0] = event.values[0]; 
saveAceelerator[1] = event.values[1]; 
saveAceelerator[2] = event.values[2];
break;
case Sensor.TYPE_ORIENTATION:
saveOrientation[0] = event.values[2]; //해딩 // //해딩
saveOrientation[1] = event.values[0]; //피치 
saveOrientation[2] = event.values[1]; //롤
break;
}
} */
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {}

    
    public class Points extends View
    {
public Points(Context context) {
super(context);
}
public void onDraw(Canvas canvas)
{
Paint pnt1 = new Paint(); 
     Paint pnt2 = new Paint();
     pnt1.setColor(Color.RED);
     pnt2.setColor(Color.BLUE);
canvas.drawCircle(270, 210, 5, pnt1); //10m
canvas.drawCircle(270, 180, 4, pnt1); //20m
canvas.drawCircle(270, 170, 2, pnt1); //30m
canvas.drawCircle(270, 168, 1, pnt2); //40m
}
    }
}
카메라 프리뷰는 다른 클래스에 있습니다
package com.RVN;

import java.io.IOException;

import android.content.Context;
import android.hardware.Camera;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

public class CamView extends SurfaceView implements SurfaceHolder.Callback {
    SurfaceHolder mHolder;
    Camera mCamera;
    
    CamView(Context context) {
        super(context);
        
        // SurfaceHolder.Callback을 설정함으로써 Surface가 생성/소멸되었음을
        // 알 수 있습니다.
        mHolder = getHolder();
        mHolder.addCallback(this);
        mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
    }

    public void surfaceCreated(SurfaceHolder holder) {
        // Surface가 생성되었다면, 카메라의 인스턴스를 받아온 후 카메라의
        // Preview 를 표시할 위치를 설정합니다.
        mCamera = Camera.open();
        try {
           mCamera.setPreviewDisplay(holder);
        } catch (IOException exception) {
            mCamera.release();
            mCamera = null;
            // TODO: add more exception handling logic here
        }
    }

    public void surfaceDestroyed(SurfaceHolder holder) {
        // 다른 화면으로 돌아가면, Surface가 소멸됩니다. 따라서 카메라의 Preview도 
        // 중지해야 합니다. 카메라는 공유할 수 있는 자원이 아니기에, 사용하지 않을
        // 경우 -액티비티가 일시정지 상태가 된 경우 등 - 자원을 반환해야합니다.
     mCamera.stopPreview();
     mCamera.release();
     mCamera = null;
    }

    public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
        // 표시할 영역의 크기를 알았으므로 해당 크기로 Preview를 시작합니다.
        Camera.Parameters parameters = mCamera.getParameters();
        parameters.setPreviewSize(w, h);
  //      mCamera.setParameters(parameters);
        mCamera.startPreview();
    }

}