定期拍照(Android Camera API)

时间:2014-06-10 07:16:40

标签: java android camera

因此,我尝试定期拍摄多张照片,但是在SurfaceView上预览第一张照片后,我会得到"takePicture Failed" Exception

这是按下按钮时调用的takePictures()方法:

public void takePictures() {
        if (getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)) {
            camera = Camera.open();

            if (camera != null) {
                try {
                    camera.setPreviewDisplay(surfaceView.getHolder());
                    camera.startPreview();

                    camera.takePicture(null, null, new CustomPictureCallbcak(this, cacheDir, imageView, 3, 5000));
                }
                catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
        else {
            Toast.makeText(this, "No camera found.", Toast.LENGTH_SHORT).show();
        }
    }

这里是onPictureTaken()的{​​{1}}方法:

CustomPictureCallback

1 个答案:

答案 0 :(得分:4)

正如Aleksander Lidtke建议的那样,我在takePictures()方法中创建了一个单独的线程并在其中放入了一个while循环:

public void takePictures(final int numOfPictures, final int delay) {

    if (getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)) {

        Thread thread = new Thread() {
            @Override
            public void run() {
                // TODO Auto-generated method stub
                super.run();
                while (numOfPicturesAlreadyTaken <= numOfPictures) {
                    try {
                        camera = Camera.open();
                        camera.setPreviewDisplay(surfaceView.getHolder());
                        camera.startPreview();
                        camera.takePicture(null, null, new CustomPictureCallbcak(MainActivity.this, cacheDir, imageView));
                        numOfPicturesAlreadyTaken++;
                        sleep(delay);
                    }
                    catch (Exception e) {
                        e.printStackTrace();
                        Log.d("TEST", e.getMessage());
                    }
                }
            }
        };
        thread.start();
    }
    else {
        Toast.makeText(this, "No camera found.", Toast.LENGTH_SHORT).show();
    }
}