안드로이드 개발 질문/답변
(글 수 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; } } }
알려주시면 정말 감사드리겠습니다.