私の問題でいくつかの解決策を検索しましたが、それに関連する問題がたくさんあることは確かですが、私の懸念を解決するものは何もありません。
実行時例外を受け取りました: 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) {
}
}