2014-04-26 2 views
1

숨겨진 카메라 응용 프로그램에서 작업하고 있지만 사진을 찍는 데 문제가 있습니다.Android takePicture는 콜백 메서드를 호출하지 않습니다 onPictureTaken()

응용 프로그램을 디버깅 할 때 takePicture를 호출 할 수 있지만 pictureCallback 클래스를 호출하지 않습니다.

나는 수업을하고 있는데, 나는 너의 도움을 기다리고있다.

public class TakePhotoClass { 

private final String LOG_TAG="Photo Taker Class";  

private Context context; 

private Camera cam; 
private Camera.PictureCallback pictureCallback; 

private AudioManager audioManager; 

public TakePhotoClass(Context con) { 
    // TODO Auto-generated constructor stub 

    context=con; 

    audioManager=(AudioManager) con.getSystemService(Context.AUDIO_SERVICE); 
} 

public void takePhoto(){ 
    prepareCamera(); 

    audioManager.setStreamMute(AudioManager.STREAM_SYSTEM, true); 

    try{ 
     cam.startPreview(); 
     cam.takePicture(null, null, pictureCallback); 

    }catch(Exception ex) 
    { 
     Log.e(LOG_TAG, "Couldn't be taken photo. Error message: "+ex.getLocalizedMessage()); 
    } 

} 

private void prepareCamera(){ 
    cam=Camera.open(); 

    Camera.Parameters param=cam.getParameters(); 

    param.setFlashMode(Camera.Parameters.FLASH_MODE_OFF); 
    param.setJpegQuality(100); 
    param.setFocusMode(param.FOCUS_MODE_AUTO); 
    param.setPictureFormat(ImageFormat.JPEG); 

    cam.setParameters(param); 


    SurfaceView view=new SurfaceView(context); 

    try { 
     cam.setPreviewDisplay(view.getHolder()); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     Log.e(LOG_TAG, "Can not set surface"); 
    } 


    setCallback(); 

} 

private void setCallback(){ 
    pictureCallback=new Camera.PictureCallback() { 

     @Override 
     public void onPictureTaken(byte[] data, Camera camera) { 
      // TODO Auto-generated method stub 

      try{ 

       File parentFolder=new File(Environment.getExternalStorageDirectory()+"/Agent Cam/Photo"); 

       File photoFile=new File(parentFolder,"photo_"+getPhotoTime()+".jpg"); 

       if(!photoFile.exists()) 
        photoFile.mkdirs(); 

       FileOutputStream stream=new FileOutputStream(photoFile); 

       stream.write(data); 
       stream.flush(); 
       stream.close(); 

       audioManager.setStreamMute(AudioManager.STREAM_SYSTEM, false); 

       context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,Uri.parse("file://"+Environment.getExternalStorageDirectory()))); 

       camera.release(); 
      }catch(Exception ex) 
      { 
       Log.e(LOG_TAG, "Photo coluldn't be saved. Error message: "+ex.getLocalizedMessage()); 
      } 
     } 
    }; 
} 

private String getPhotoTime(){ 
    SimpleDateFormat sdf=new SimpleDateFormat("ddMMyy_hhmmss"); 

    return sdf.format(new Date()); 
} 

} 

답변

0

Camera.PictureCallback의 방법은 onPictureTaken이 (takePicture 참조) 비동기 적으로 호출되는 앱은 호출 할 때까지 기다려야한다.

관련 문제