我想通过 Intent 捕捉图像
意图 cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE)
但问题是使用此代码启动相机并且用户必须单击相机按钮来捕捉图像,但我想要的是相机应该启动并拍照而无需与用户进行任何进一步的交互
我想使用 INTENT 来做到这一点
我想通过 Intent 捕捉图像
意图 cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE)
但问题是使用此代码启动相机并且用户必须单击相机按钮来捕捉图像,但我想要的是相机应该启动并拍照而无需与用户进行任何进一步的交互
我想使用 INTENT 来做到这一点
我就是这样做的:声明一个 Camera 和 SurfaceHolder 的实例。
创建一个对象CallBackPicture,并实现PictureTaken上的方法(要拍照时启动的方法)
mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
Camera.PictureCallback mCall = new Camera.PictureCallback()
{
@Override
public void onPictureTaken(byte[] data, Camera camera)
{
//DO YOUR STUFF
}
};
// Open the instance of camera
mCamera = Camera.open();
try {
// Call the preview (not sure if it is working without this call
mCamera.setPreviewDisplay(mSurfaceHolder);
mCamera.startPreview();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(mCamera == null) Log.i(TAG, "mCamera is null");
// Will call the onPictureTaken implemented above
// Look at the documentation : public final void takePicture
mCamera.takePicture(null, null, mCall);
mCamera.stopPreview();
mCamera.release();
通过修改这个,你应该能够做你想做的事。不要忘记修改 Manifest.XML,但我想你已经做到了!
编辑:有时 stoppreview() 和 release() 会出现一些问题。所以,我所做的是:
if (mCamera != null) {
mCamera.release();
mCamera = null;
}
mCamera = Camera.open();
etc...
这是做不到的。只有两个选项:
通过 Intent 调用相机应用程序。然后用户以正常方式使用相机应用程序 - 即在准备好时按下按钮。
使用Camera
类 - 与通过 Intent 运行相机应用程序相比,这需要更多的工作。但它可以让你完全控制。
当您调用相机意图时,您基本上“运行”相机应用程序(或在此意图上注册的其他应用程序),所以基本上,您无法控制它的工作方式。您可以使用相机 API ...看看这里