3
Так что я пытаюсь делать несколько снимков с регулярными интервалами времени, однако я получаю "takePicture Failed" Exception
после того, как первое изображение будет просмотрено на поверхности.Съемка с регулярными интервалами (Android Camera API)
Вот мой 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()
метод CustomPictureCallback
:
@Override
public void onPictureTaken(byte[] data, Camera camera) {
//get date info for file name
SimpleDateFormat sdf = new SimpleDateFormat("ddmmyyyyhhmmss");
String date = sdf.format(new Date());
String fileDir = createImageFileName(date);
//write the image to cache
writeImageToCache(fileDir, data);
//display file name in a toast notification
Toast.makeText(c, fileDir, Toast.LENGTH_SHORT).show();
//show picture on imageview
imageView.setImageBitmap(BitmapFactory.decodeByteArray(data, 0, data.length));
//retake images
this.camera = camera;
while (numOfImagesAlreadyTaken <= numOfImages) {
Thread thread = new Thread() {
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
try {
numOfImagesAlreadyTaken++;
CustomPictureCallbcak.this.camera.stopPreview();
sleep(delay);
CustomPictureCallbcak.this.camera.takePicture(null, null, CustomPictureCallbcak.this);
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
};
thread.start();
}
Toast.makeText(c, "Total images taken: " + numOfImagesAlreadyTaken, Toast.LENGTH_SHORT).show();
//release camera
camera.release();
camera = null;
}
Где у вас возникает исключение? –
@AleksanderLidtke, сразу после первого снимка, поэтому в основном при запуске нового потока. –
Правильно, почему вы создаете поток, который снимает внутри «OnPictureTaken»? Не было бы проще и чище создавать «поток» и помещать цикл while в 'takePictures' и оставить метод обратного вызова относительно простым? Я написал код, который делает именно то, что вы пытаетесь сделать так, и это отлично работает с git-go. –