안녕하세요. 실력이 하수라... 눈팅만 하다가 실제 해보고 있는데..

역쉬..넘 다가오는 오류는 어쩔수 없는듯합니다.;;;

 

고수님들에게 무엇이 오류인지...알수가 없습니다.

 

권한 또한 다 넣은상태라... 줄여가면서 올려야 하지만 ... 지금 왜 도대체 생기는건지.. 도무지 알길이 없어서 이렇게 올려 봅니다.

다른 오류 없이 구동 되어 다가 버튼을 누르면 오류가 발생됩니다.

 

 

<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;
  }
 
 } 
}

알려주시면 정말 감사드리겠습니다.