Я искал некоторые решения с моей проблемой и уверен, что есть много связанных с этим проблем, но ничто не решает мою проблему.Не удалось сделать снимок с помощью автофокуса
Я получаю исключение во время выполнения: takepicture failed:native_autofocus
..etc.
Я попытался сфотографироваться с камеры с помощью автофокуса, и я не могу понять, что могло вызвать ошибку.
Вот мой код.
public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback {
private SurfaceHolder mholder;
private Camera mcamera;
private Handler handler = new Handler();
public CameraPreview(Context context, Camera camera) {
super(context);
this.mcamera = camera;
mholder = getHolder();
mholder.addCallback(this);
mholder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
if (mholder.getSurface() == null) {
return;
}
try {
mcamera.stopPreview();
} catch (Exception e) {
Log.d("surfaceChanged", e.toString());
}
try {
mcamera.setPreviewDisplay(holder);
mcamera.startPreview();
} catch (IOException e) {
Log.d("surfaceChanged--->surfaceCreated", e.toString());
}
}
Я думаю, что нечто не хватает в моем работоспособном коде, я попытался опустить работоспособные и выполнить автофокусировку один раз, она была удалена ошибкой во время выполнения. Я пропустил, чтобы повторно инициализировать что-то в этой части?
private void autoFocus(Camera mcamera){
final Camera cam=mcamera;
handler.postDelayed(new Runnable() {
@Override
public void run() {
cam.autoFocus(autoFocusCallback);
handler.postDelayed(this, 1500L);
}
}, 1500L);
}
AutoFocusCallback autoFocusCallback=new AutoFocusCallback() {
@Override
public void onAutoFocus(boolean success, Camera camera) {
camera.takePicture(null, null, mPicture);
}
};
private PictureCallback mPicture=new PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
//do something
}
};
@Override
public void surfaceCreated(SurfaceHolder holder) {
try {
mcamera.setPreviewDisplay(holder);
mcamera.startPreview();
mcamera.autoFocus(autoFocusCallback);
} catch (IOException e) {
Log.d("surfaceCreated", e.toString());
}
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
}
}
Пожалуйста, разместите более подробную информацию об ошибках, которые вы видите. Лучше всего использовать фрагмент журнала с самого начала вашего приложения до отказа. –