버튼을 클릭할때 촬영음과 잠깐 멈추는 동작이 나오는데 지정해놓은 경로로 사진이 저장되지 않습니다
왜그러는지 고수님들 알려주세요ㅜㅜ
public class CameraActivity extends Activity {
private Preview pv;
private Button btn;
private FrameLayout fl;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
pv = new Preview(this);
fl = (FrameLayout) findViewById(R.id.preview);
fl.addView(pv);
btn = (Button) findViewById(R.id.btn);
btn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// 사진 찍기
pv.getCamera().takePicture(shutterCallback, rawCallback,
jpegCallback);
}
});
}
ShutterCallback shutterCallback = new ShutterCallback() {
public void onShutter() {
}
};
// raw 파일
PictureCallback rawCallback = new PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
}
};
// jpg파일
PictureCallback jpegCallback = new PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
FileOutputStream outStream = null;
try {
outStream = new FileOutputStream(String.format(
"/sdcard/DCIM/%d.jpg", System.currentTimeMillis()));
outStream.write(data);
outStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
};
class Preview extends SurfaceView implements SurfaceHolder.Callback {
private SurfaceHolder mHolder;
private Camera camera;
Preview(Context context) {
super(context);
mHolder = getHolder();
mHolder.addCallback(this);
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
public Camera getCamera() {
return camera;
}
public void surfaceCreated(SurfaceHolder holder) {
// 카메라 초기화
try {
// 전면카메라 사용
int cameraId = findFrontSideCamera();
camera = Camera.open(cameraId);
// 카메라 회전
// Camera.Parameters parameters = camera.getParameters();
// if (this.getResources().getConfiguration().orientation !=
// Configuration.ORIENTATION_LANDSCAPE) {
camera.setDisplayOrientation(90);
// }
// parameters.setRotation(90);
// parameters.setPreviewSize(640, 480);
// parameters.setPictureSize(640, 480);
// camera.setDisplayOrientation(90);
// camera.setParameters(parameters);
camera.setPreviewDisplay(holder);
// camera.startPreview();
// 미리보기의 프레임을 .setPreviewCallback()으로 새로 정의
camera.setPreviewCallback(new PreviewCallback() {
public void onPreviewFrame(byte[] data, Camera camera) {
// TODO Do something with the preview image.
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
public void surfaceDestroyed(SurfaceHolder holder) {
camera.stopPreview();
camera = null;
}
public void surfaceChanged(SurfaceHolder holder, int format, int w,
int h) {
Camera.Parameters parameters = camera.getParameters();
parameters.setPreviewSize(w, h);
camera.setParameters(parameters);
camera.startPreview();
}
}
private int findFrontSideCamera() {
int cameraId = -1;
int numberOfCameras = Camera.getNumberOfCameras();
for (int i = 0; i < numberOfCameras; i++) {
CameraInfo cmInfo = new CameraInfo();
Camera.getCameraInfo(i, cmInfo);
if (cmInfo.facing == CameraInfo.CAMERA_FACING_FRONT) {
cameraId = i;
break;
}
}
return cameraId;
}
}