2013-02-26 6 views
3

Я искал некоторые решения с моей проблемой и уверен, что есть много связанных с этим проблем, но ничто не решает мою проблему.Не удалось сделать снимок с помощью автофокуса

Я получаю исключение во время выполнения: 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) { 

    } 
} 
+1

Пожалуйста, разместите более подробную информацию об ошибках, которые вы видите. Лучше всего использовать фрагмент журнала с самого начала вашего приложения до отказа. –

ответ

0

Вы не упомянули об этом, но обязательно включите разрешение в манифест.

< использует функцию-андроид: имя = "android.hardware.camera.autofocus" />

4

взглянуть here

или here

и вы звоните автофокусировку на surfacecreated, Его следует называть с измененной поверхностью.

 Смежные вопросы

  • Нет связанных вопросов^_^