버튼을 눌러도 반응이 없습니다.
플래시, 셔터음, 사진저장 아무것도 안되네요...
문제가 뭘까요.
public class MyPreview extends AppCompatActivity {
MyCameraSurface mSurface;
Button mShutter;
String mRootPath;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_0);
mSurface = (MyCameraSurface) findViewById(R.id.previewFrame);
mShutter = (Button)findViewById(R.id.button1);
mShutter.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
Camera.Parameters mCameraParameter;
mCameraParameter = mSurface.mCamera.getParameters();
mCameraParameter.setFlashMode("On");
mSurface.mCamera.setParameters(mCameraParameter);
mSurface.mCamera.takePicture(shutterCallback, null, mPicture);
}});
}
PictureCallback mPicture = new PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
//날짜로 파일 이름 만들기
Calendar calendar = Calendar.getInstance();
String FileName = String.format("SH%02d%02d%02d-%02d%02d%02d.jpg",
calendar.get(Calendar.YEAR) % 100, calendar.get(Calendar.MONTH)+1,
calendar.get(Calendar.DAY_OF_MONTH), calendar.get(Calendar.HOUR_OF_DAY),
calendar.get(Calendar.MINUTE), calendar.get(Calendar.SECOND));
String path = mRootPath + "/" + FileName;
File file = new File(path);
try {
FileOutputStream fos = new FileOutputStream(file);
fos.write(data);
fos.flush();
fos.close();
} catch (Exception e) {
return;
}
//파일을 갤러리에 저장
Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
Uri uri = Uri.parse("file://" + path);
intent.setData(uri);
sendBroadcast(intent);
Toast.makeText(getApplicationContext(), "사진이 저장 되었습니다", Toast.LENGTH_SHORT).show();
camera.startPreview();
}
};
ShutterCallback shutterCallback = new ShutterCallback() {
public void onShutter () {
}
};
}
class MyCameraSurface extends SurfaceView implements SurfaceHolder.Callback {
SurfaceHolder mHolder;
Camera mCamera;
public MyCameraSurface(Context context, AttributeSet attrs) {
super(context, attrs);
mHolder = getHolder();
mHolder.addCallback(this);
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
// 표면 생성시 카메라 오픈하고 미리보기 설정
public void surfaceCreated(SurfaceHolder holder) {
mCamera = Camera.open();
mCamera.setDisplayOrientation(90);
try {
mCamera.setPreviewDisplay(mHolder);
} catch (IOException e) {
mCamera.release();
mCamera = null;
}
}
// 표면 파괴시 카메라도 파괴한다.
public void surfaceDestroyed(SurfaceHolder holder) {
if (mCamera != null) {
mCamera.stopPreview();
mCamera.release();
mCamera = null;
}
}
// 표면의 크기가 결정될 때 최적의 미리보기 크기를 구해 설정한다.
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
Camera.Parameters params = mCamera.getParameters();
params.setPreviewSize(width, height);
params.setPictureSize(width, height);
params.setRotation(90);
mCamera.setParameters(params);
mCamera.startPreview();
}
}