Java 安卓takePicture不';t调用回调方法onPictureTaken()

Java 安卓takePicture不';t调用回调方法onPictureTaken(),java,android,callback,camera,Java,Android,Callback,Camera,我正在开发一个隐藏相机应用程序,但我在拍照时遇到了一些问题 当我调试应用程序时,我可以看到takePicture可以被调用,但它不调用pictureCallback类 我正在上我正在使用的课程,等待你们的帮助 public class TakePhotoClass { private final String LOG_TAG="Photo Taker Class"; private Context context; private Camera cam; private Cam

我正在开发一个隐藏相机应用程序,但我在拍照时遇到了一些问题

当我调试应用程序时,我可以看到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());
}   

}

Camera.PictureCallback在PictureTaken上的方法是异步调用的(请参阅),您的应用程序应该等待调用它