새내기 개발자 입니다!! 앱을 하나 개발하고 싶어서 책을 보면서 하나씩 따라하고 있는 아주 초보 개발자 입니다.
"안드로이드 프로그래밍 정복" 이란 책을 하나씩 보면서 따라하는 중인데요. 도중에 카메라 파트에서 소스를 구현 하였을때
사진이 1장만 저장 되는 것 알게 되었습니다.
저는 다른 경로에 여러 사진을 저장하고 싶은데, 아무리 해봐도 되지가 않네요 ㅜㅜ
해서 이렇게 여러분들꼐 질문 드립니다 ㅜ 다른 경로에 사진을 여러장 저장 할 수 있게 하는 법좀 알려주십시오 ㅜㅜ
------------------------------------------------------------------------------------------------------- .java 파일입니다.
package org.androidtown.kamera;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.hardware.Camera;
import android.hardware.Camera.AutoFocusCallback;
import android.hardware.Camera.PictureCallback;
import android.hardware.Camera.Size;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.util.AttributeSet;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends Activity {
MyCameraSurface mSurface;
Button mShutter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mSurface = (MyCameraSurface)findViewById(R.id.preview);
findViewById(R.id.focus).setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
mShutter.setEnabled(false);
mSurface.mCamera.autoFocus(mAutoFocus);
}
});
mShutter = (Button)findViewById(R.id.shutter);
mShutter.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
mSurface.mCamera.takePicture(null, null, mPicture);
}
});
}
AutoFocusCallback mAutoFocus = new AutoFocusCallback() {
public void onAutoFocus(boolean success, Camera camera) {
mShutter.setEnabled(success);
}
};
PictureCallback mPicture = new PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
String sd = Environment.getExternalStorageDirectory().getAbsolutePath();
String path = sd + "/cameratest.jpg";
File file = new File(path);
try {
FileOutputStream fos = new FileOutputStream(file);
fos.write(data);
fos.flush();
fos.close();
} catch (Exception e) {
Toast.makeText(MainActivity.this, "파일 저장 중 에러 발생: " + e.getMessage(), 0).show();
return;
}
Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE );
Uri uri = Uri.parse("file://" +path);
intent.setData(uri);
sendBroadcast(intent);
Toast.makeText(MainActivity.this, "사진 저장 완료 : " + path , 0).show();
mSurface.mCamera.startPreview();
}
};
}
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();
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();
List<Size> arSize = params.getSupportedPreviewSizes();
if (arSize == null){
params.setPreviewSize(width, height);
}else {
int diff = 10000;
Size opti = null;
for ( Size s : arSize) {
if (Math.abs(s.height - height) < diff) {
diff = Math.abs(s.height - height);
opti = s;
}
}
params.setPreviewSize(opti.width, opti.height);
}
mCamera.setParameters(params);
mCamera.startPreview();
}
}
------------------------------------------------------------------------------------------------------------------