android - 使用自动对焦拍照失败

标签 android android-camera autofocus surfaceholder

我已经针对我的问题搜索了一些解决方案,并确定有很多相关问题,但没有解决我的问题。

我收到运行时异常: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) {

    }
}

最佳答案

你没有提到它,但一定要在你的 list 中包含权限。

< 使用特征 android:name="android.hardware.camera.autofocus"/>

关于android - 使用自动对焦拍照失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15086166/

相关文章:

javascript - Autofocus 在 Firefox 上不起作用,在来自另一个页面时不起作用

dropdown - 如何在其父组件挂载时拥有语义 UI React Dropdown 自动对焦?

Android:FFmpeg 占用高内存/cpu 使用率导致崩溃

android - Android 中的 Mpchartlib 从饼图中删除切片文本

安卓工作室 : Logcat vs Run

Android - 如何摆脱 3D 对象的黑色背景并查看相机 View ?

android - 无法在Android中实现RTSP服务器

Android相机byte[]数组转2D数组

android - Webview + 滚动问题 + android