安卓启动相机有2种方法 一种是通过Intent直接调用系统相机显示启动和隐身启动
<span style="font-family: Arial, Helvetica, sans-serif;">Intent intent=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);</span>
startActivity(intent);
</pre><p></p><pre>
获取拍照的图片即需要重写startActivityForResult() 并重写onActivityResult() 方法
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data){
if (RESULT_OK == resultCode){
Bundle bundle=data.getExtral();
Bitmap bitmap=(Bitmap)bundle.get("data");
}
不过这样获取到的是省略图,因为不允许Intent之间传输大数据,若要将图片保存到另外的路径 即需要定义个一个路径Path
将Path传入Uri
Uri uri=Uri.fromFile(new File(Path));
intent.putExtral(MediaStore.EXTRA_UOTPUT,uri);
在传入startactivity 这样就可以保存到固定路径,然后在
onActivityResult() 中
FileInputStream stream=new FileInputStream(Path)//路径
Bitmap bitmap=BitmapFactory.decodeStream(stream);
这样得到的就是清晰的图像
当然也可以自定义一个相机,不要调用系统相机
首先肯定要新建一个Activity,他的布局文件 关于摄像头的图像 ,主要用Surfaceview加载
首先在oncreat()方法中,应该创建一个Camera对象
Camera camera=Camera.Open();//该API在5.0后变了 不过仍可以使用
由于资源占用比较大,所以我们最好在activity销毁的方法中加入
camera.setPreviewcallback(null);
camera.stopPreview();
camera.release();
在通过camera.getHolder实现SurfaceHolder holder=camera.getHolder();对象,通过holder.addcallback实现里面方法的回调。
在回调方法create()和change()中,加入如下方法
camera.setPreviewDisplay(holder);//将holder绑定要相机捕获到的图像上
camera.setdisplayorientation(90);//由于默认是横屏,所以要设置后才为竖屏
camera.startpreview();
也可以再布局文件中多添加一个按钮,设置点击事件,然后设置拍照参数
Camera.parameters parameters=camera.getParameters();
parameters.setPictureFormat(ImageFormat.JPEG);//设置图像格式
parameters.setPreViewsize(800,400);//设置图像大小
parameters.setFocusMode()//设置自动对焦
parameters.autoFocus(new AutoFocusCallBack(){
onAutoFrous(){//在此方法里判断是否聚焦成功
camera.takePicture(null,null,new pictureCallback(){//进行拍照操作
onPictureTaken(data){//注意里面的data是图片数据,并不是缩略图数据
//在此进行接下来想要的操作,提示:可将图片保存到一个路径中,在将路径信息带到想要跳转的activity中,以避免传输过程数据过大
}
});
}
});