Camera学习,调用系统摄像机。

1、android很多应用会调用照相机功能,比如拍照上传用户图像等等,不多说,下面上传简单的demo:

public class MainActivity extends Activity {//ActionBarActivity

	 private Uri uriSavedImage;
	 private ImageView image;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        image=(ImageView) findViewById(R.id.image);

    }

    public void start(View v)
    {

    	 Intent imageIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
         File imagesFolder = new File(Environment.getExternalStorageDirectory(), "MyImages");
         imagesFolder.mkdirs();
//         System.out.println(Environment.getExternalStorageDirectory());
         File imagefile = new File(imagesFolder, "image_001.jpg");
          uriSavedImage = Uri.fromFile(imagefile);
        //mediaStore.EXTRA_OUTPUT参数是向系统摄像机提交存储的请求,uriSAvedImage是存储的
        //uri即具体存储位置,和名称。系统相机会先 查看第一个参数,如果为空则存储到相机默认位置     
        //,不为空则根据uri存储到程序指定的位置
         imageIntent.putExtra(MediaStore.EXTRA_OUTPUT, uriSavedImage);
         startActivityForResult(imageIntent,0);
    }

	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {

//		image.setImageURI(uriSavedImage);

		 System.out.println(uriSavedImage.toString());
		 String stringUri=uriSavedImage.toString();
		 int index=stringUri.indexOf("//");
		 String path=stringUri.substring(index+2, stringUri.length());
		 System.out.println(path);
		 File f=new File(path);
		Bitmap	bmp=null;
		try {
				bmp = MediaStore.Images.Media.getBitmap(this.getContentResolver(), Uri.fromFile(f));
		} catch (Exception e) {
			e.printStackTrace();
		}
		image.setImageBitmap(bmp);

		super.onActivityResult(requestCode, resultCode, data);
	}

  

  注意:的是ImaeView的setImgeUri和setImageDrawable都会为ImageView创建一个数据缓存,如果第二次调用这个方法时候就会设置成缓存数据里的图像,因此用户在对第一次拍的不满意时,想重新拍摄的时候总显示第一次拍的图像。

因此解决方法:

1、用不同的uri,即文件名不同,太麻烦且占空间不可取。

2、采用直接设置图片的方式,如上面代码中一样,采用setImageBitmap()的方法。

时间: 2024-10-18 20:12:45

Camera学习,调用系统摄像机。的相关文章

以获取和添加联系人为例学习调用系统ContentPrivider

以获取和添加联系人为例,学习调用系统提供的ContentProvider 安卓系统在做联系人这个APP的时候,就已经提供好了一个联系人的ContentProvider. 包括3个表 1.raw_contacts表 Contact_id存放联系人的id 该表保存了所有创建过的手机联系人,每个联系人占一行,表里有一列标识该联系人是否被删除,该表保存了两个ID:RawContactID和ContactID,从而将contacts表和raw_contacts表联系起来.该表保存了联系人的RawConta

Android Camera 使用小结。两种方法:一是调用系统camera app,二是自己写camera程序。

源文链接:http://www.cnblogs.com/franksunny/archive/2011/11/17/2252926.html Android Camera 使用小结 Android手机关于Camera的使用,一是拍照,二是摄像,由于Android提供了强大的组件功能,为此对于在Android手机系统上进行Camera的开发,我们可以使用两类方法:一是借助Intent和MediaStroe调用系统Camera App程序来实现拍照和摄像功能,二是根据Camera API自写Came

Android学习笔记之,调用系统图库,添加自定义字体,屏幕截图

新年开始的第一天就来学习了慕课迎春活动中的Android心愿分享一课,学到了几个知识点,在此记录一下. 1.调用系统图库调用系统图库用的是intent,步骤为弹出系统图库选择器,选择图片后获取到所选择的图片.代码如下: //在需要的地方调用 Intent intent = new Intent(Intent.ACTION_PICK, null); intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/

android camera 学习

总体介绍 Android Camera框架从整体上看是一个client/service架构.有两个进程,一个是client进程,可以看成AP端 ,主要包括Java代码和一些native层的c/c++代码:另一个是service进程,属于服务端,是native c/c++代码, 主要负责和linux kernel中的camera driver交互,搜集linux kernel中driver层传上来的数据,并交给显示系统(surface)显示.client 和 service 进程通过Binder机

Android调用系统相机拍照保存照片很小解决方案

保存图片小的一般操作步骤: 1. 调用系统相机 Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(intent, 1); 2. 保存照片 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {  // TODO Auto-generated method s

小米手机调用系统截图挂掉问题

调试系统切图 用户修改头像,当用户选择相册图片,然后调用系统切图工具后 小米手机直接退出程序,测试 MX 三星 都没问题 以下代码最关键地方 intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.parse(imagePath)); intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString()); public static void startPhotoZoom(Cont

Android图片系列(1)-------调用系统相册与相机获取图片

Android开发过程中,我们经常需要获取图片,你可以通过获取手机相册的图片,也可以调用相机拍照获取图片.这里主要讲这两个获取图片的方式,并记录其中遇到的小问题. 调用相册获取图片 这个功能非常简单,这里不多说了,这里贴出关键代码 Intent openAlbumIntent = new Intent(Intent.ACTION_GET_CONTENT); openAlbumIntent.setType("image/*"); startActivityForResult(openAl

Android调用系统相机、自定义相机、处理大图片

Android调用系统相机和自定义相机实例 本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显示出来,该例子也会涉及到Android加载大图片时候的处理(避免OOM),还有简要提一下有些人SurfaceView出现黑屏的原因. Android应用拍照的两种方式,下面为两种形式的Demo展示出来的效果.    知识点: 一.调用系统自带的相机应用 二.自定义我们自己的拍照界面 三.关于计算机解析图片原理(如何正确加载图片到Android应用中) 所需

调用系统的相机和图库,并裁剪

1 private static final int PHOTO_REQUEST_TAKEPHOTO = 1;// 拍照 2 private static final int PHOTO_REQUEST_GALLERY = 2;// 从相册中选择 3 private static final int PHOTO_REQUEST_CUT = 3;// 结果 4 private File tempFile = new File(Environment.getExternalStorageDirect