안드로이드 개발 질문/답변
(글 수 45,052)
안녕하세요. 실력이 하수라... 눈팅만 하다가 실제 해보고 있는데..
역쉬..넘 다가오는 오류는 어쩔수 없는듯합니다.;;;
고수님들에게 무엇이 오류인지...알수가 없습니다.
권한 또한 다 넣은상태라... 줄여가면서 올려야 하지만 ... 지금 왜 도대체 생기는건지.. 도무지 알길이 없어서 이렇게 올려 봅니다.
다른 오류 없이 구동 되어 다가 버튼을 누르면 오류가 발생됩니다.
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.RECORD_VIDEO" />
CameraActivity.java
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
pvt = new PreViewTest(this);
ll = (LinearLayout)findViewById(R.id.linearlayout1);
ll.addView(pvt);
bt = (Button)findViewById(R.id.button1);
bt2 = (Button)findViewById(R.id.button2);
//찰영 녹화 시작
bt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
try {
pvt.CheckRun(myToast(0));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
//찰영녹화 중지
bt2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
try {
pvt.CheckRun(myToast(1));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
}
public int myToast(int i){
switch(i)
{
case 0:
Toast.makeText(this, "촬영 시작됨", Toast.LENGTH_SHORT).show();
break;
case 1:
Toast.makeText(this, "촬영 종료", Toast.LENGTH_SHORT).show();
break;
}
return i;
}PreViewTest .java
public class PreViewTest extends SurfaceView
implements SurfaceHolder.Callback {
Camera my_camera = null;
SurfaceHolder my_sfh = null;
Thread startPreviewThread = null;
MediaRecorder my_mrd;
String path = "";
Context mCtx;
public PreViewTest(Context Context) {
super(Context);
mCtx = Context;
my_sfh = getHolder();
my_sfh.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
my_sfh.addCallback(this);
}
public void onStart()
{
my_camera = Camera.open();
my_mrd = new MediaRecorder();
my_camera.unlock();
my_mrd.setCamera(my_camera);
File file = Environment.getExternalStorageDirectory();
path = file.getAbsolutePath() + "/test.mp4";
my_mrd.setAudioSource(MediaRecorder.AudioSource.MIC);
my_mrd.setVideoSource(MediaRecorder.VideoSource.CAMERA);
my_mrd.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
my_mrd.setVideoSize(320, 240);
my_mrd.setVideoFrameRate(15);
my_mrd.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
my_mrd.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
}
@Override
public void surfaceCreated(SurfaceHolder holder)
{
onStart();
try {
if (my_mrd != null) {
my_mrd.prepare();
}
} catch (Exception e) {
Log.d("test", "prepare에러" + e.getMessage());
}
}
@Override
public void surfaceDestroyed(SurfaceHolder holder)
{
if (my_camera != null) {
my_camera.stopPreview();
my_camera.release();
my_camera = null;
}
}
@Override
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
Camera.Parameters parameters = my_camera.getParameters();
parameters.setPreviewSize(320, 240);
my_camera.setParameters(parameters);
my_camera.startPreview();
}
public void CheckRun(int i) throws InterruptedException
{
switch(i)
{
case 0:
my_mrd.setPreviewDisplay(my_sfh.getSurface());
my_mrd.setOutputFile(path);
my_mrd.start();
break;
case 1:
if (my_camera != null)
{
my_mrd.stop();
my_mrd.release();
my_camera.lock();
}
break;
}
}
}알려주시면 정말 감사드리겠습니다.



