【问题标题】:Capture Images With Intent without clicking the camera button again有意图地捕获图像而无需再次单击相机按钮
【发布时间】:2011-09-02 12:53:15
【问题描述】:
我想通过 Intent 捕捉图像
意图 cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE)
但问题是使用此代码启动相机并且用户必须单击相机按钮来捕获图像,但我想要的是相机应该启动并拍照而不与用户进行任何进一步的交互
我想用 INTENT 来做这个
【问题讨论】:
标签:
android
android-camera-intent
【解决方案1】:
我就是这样做的:
声明一个 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...
【解决方案2】:
这是不可能的。只有两种选择:
通过 Intent 调用相机应用。然后用户以正常方式使用相机应用程序 - 即准备就绪时按下按钮。
使用 Camera 类 - 与通过 Intent 运行相机应用程序相比,这需要更多工作。但它可以让您完全控制。
【解决方案3】:
当您调用相机意图时,您基本上是“运行”相机应用(或在此意图上注册的其他应用),所以基本上,您无法控制它的工作方式。
你可以使用Camera API...看看here