2 mnbk7 mnbk7 于 2016.09.10 11:30 提问

Android如何调用相机自动聚焦并拍照? 1C

如何调用相机自动拍照?调用相机后 自动对焦 过1-2秒自动拍照 然后返回操作界面。现在就是不会怎么让他自己拍 而不是 调用后 手动点击拍照。请各位打神指点,急!急!急!

4个回答

Mr_dsw
Mr_dsw   Ds   Rxr 2016.09.10 12:30

我想的是你搞个定时任务,1、2秒后就让它自己拍照。

mnbk7
mnbk7   2016.09.10 13:14

不是定时任务,一打开相机,就要自动拍照

windboy2014
windboy2014   2016.09.10 18:21
private SurfaceView surfaceView;  
private SurfaceHolder surfaceHolder;  
private boolean flag = false;  
private String fileUrl="";  
Camera camera;  
Camera.Parameters parameters;  

@Override  
protected void onCreate(Bundle savedInstanceState) {  
    super.onCreate(savedInstanceState);  


  setContentView(R.layout.activity_main);  
  surfaceView =  (SurfaceView) findViewById(R.id.surfaceView1);  
  Button  button=(Button) findViewById(R.id.takepicture);  
  surfaceHolder =  surfaceView.getHolder();  
  surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);  
  surfaceHolder.setKeepScreenOn(true);  
  surfaceView.setFocusable(true);  
  surfaceView.setBackgroundColor(TRIM_MEMORY_BACKGROUND);  
  surfaceHolder.addCallback(new Callback() {  
  @Override  
    public void surfaceDestroyed(SurfaceHolder holder) {  
        // TODO Auto-generated method stub  
         camera.stopPreview();  
         camera.release();  
         camera=null;  

    }  

    @Override  
    public void surfaceCreated(SurfaceHolder holder) {  
        // TODO Auto-generated method stub  
        if(null==camera){  
            camera=Camera.open();  
        try {  
                  camera.setPreviewDisplay(surfaceHolder);  
                  initCamera();  
                  camera.startPreview();  
            } catch (IOException e) {  
                // TODO Auto-generated catch block  
                e.printStackTrace();  
            }  
      }  

    }  

    @Override  
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height){  
        //实现自动对焦  
        camera.autoFocus(new AutoFocusCallback() {  
            @Override  
            public void onAutoFocus(boolean success, Camera camera) {  
                if(success){  
                    initCamera();//实现相机的参数初始化  
                    camera.cancelAutoFocus();//只有加上了这一句,才会自动对焦。  
                }  
            }  

        });  
     }  

});  

}

//相机参数的初始化设置

private void initCamera()

{

parameters=camera.getParameters();

parameters.setPictureFormat(PixelFormat.JPEG);

//parameters.setPictureSize(surfaceView.getWidth(), surfaceView.getHeight()); // 部分定制手机,无法正常识别该方法。

parameters.setFlashMode(Parameters.FLASH_MODE_TORCH);

parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);//1连续对焦

setDispaly(parameters,camera);

camera.setParameters(parameters);

camera.startPreview();

camera.cancelAutoFocus();// 2如果要实现连续的自动对焦,这一句必须加上

    }  

  //控制图像的正确显示方向  
  private void setDispaly(Camera.Parameters parameters,Camera camera)  
  {  
      if (Integer.parseInt(Build.VERSION.SDK) >= 8){  
            setDisplayOrientation(camera,90);  
        }  
    else{  
            parameters.setRotation(90);  
        }  

  }       

  //实现的图像的正确显示  
  private void setDisplayOrientation(Camera camera, int i) {  
      Method downPolymorphic;  
     try{  
            downPolymorphic=camera.getClass().getMethod("setDisplayOrientation", new Class[]{int.class});  
            if(downPolymorphic!=null) {  
                downPolymorphic.invoke(camera, new Object[]{i});  
            }  
        }  
        catch(Exception e){  
            Log.e("Came_e", "图像出错");  
        }  
  }  


@Override  
public boolean onCreateOptionsMenu(Menu menu) {  
    // Inflate the menu; this adds items to the action bar if it is present.  
    getMenuInflater().inflate(R.menu.main, menu);  

    return true;  
}  

        谷歌自己的技术能解决
Marksinoberg
Marksinoberg   Ds   Rxr 2016.09.11 08:03

既然你可以自己拍实现了。在聚焦的那个回调中添加一个时间不就可以了吗,来保证在时间结束后调用拍照方法。

Csdn user default icon
上传中...
上传图片
插入图片