打开android 系统的相机,拍照并且图片返回

转载:http://www.jianshu.com/p/7052add136f2

     之前一直不了解相机这里,也尝试写过但总是出错,这篇文章讲的很明白,特此记录,

    主要介绍了打开相机进行拍照之后,获取拍照后的照片

    问题1.调用系统相机拍照,并且把图片返回流程是什么?

    答:1.定义一个Uri用来标记相机拍摄的照片

         2.通过系统的action打开系统相机,同时传递Uri 

         3.拍照之后点击确定回调 onActivityResult()方法,在该方法中 获取拍照返回的Uri 

     注意 :有的手机的Uri此时传递回 onActivityResult 时,通过 data.getDatd( )时,为空,

                 这时可以用一个变量引用之前的Uri就好了;在返回的data中的是一个压缩过的Bitmap,

                 而且压缩的比较厉害,所以根本不会产生OOM异常作者试过之后,确实是一个清晰度

                相当低的一张图片,根本不能满足需求,所以需要返回原图,当然这个原图是需要处理

                的,否则依然会出现OOM

   问题2 .图片保存路径,总是分不清楚,图片存在哪里,返回Uri的话,图片Uri可以转化为图片的路径string

                  path: 系统相册的路径  

String path=Environment.getExternalStorageDirectory( )+File.separator+

   Environmen.DIRECTORY_DCIM+ File.separator; 

                   即path : /storage/emulated/0/DCIM/

存储图片(文件)的 名字 ,按照时间来命名:

                 private   String  getPhoneFileName(){

Date  date =new Date(System.currentTimeMillis( ));

    SimpleDateFormat   dateFormat=new SimpleDateFormat("yyyyMMdd_HHmmss");

return "IMG_"+dateFormat.format(date);

}

图片存储的地址 = path+文件名+“.jpg”


问题3.涉及的权限

     
     

下面是具体的步骤:

正常调用相机,在

          Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
          startActivityForResult(intent, REQUEST_CODE);

然后重写onActivityResult

     @Override
     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
         super.onActivityResult(requestCode, resultCode, data);
        }
    }

上面是整体的框架,下面是具体的代码:

 
  
String state = Environment.getExternalStorageState(); if (state.equals(Environment.MEDIA_MOUNTED)) { File file = new File(path); if (!file.exists()) { file.mkdir(); } String fileName = getPhotoFileName() + ".jpg"; //图片的文件名 Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); photoUri = Uri.fromFile(new File(path + fileName));//记录图片的uri intent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri); //photoUri就是图片存储的位置 startActivityForResult(intent, REQUEST_CODE); }
关于 图片返回部分 ,如下

 
  
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode != RESULT_OK) { return; } if (requestCode == REQUEST_CODE) { Log.d(TAG, "开始回调"); Uri uri = null; if (data != null && data.getData() != null) { uri = data.getData(); } if (uri == null) { //如果是空的,使用记录的Uri if (photoUri != null) { uri = photoUri; } } }

 打开相机 ,拍照 ,完成 ,返回的图片,如图:


   打开android 系统的相机,拍照并且图片返回_第1张图片


介绍到这里

  


你可能感兴趣的:(打开android 系统的相机,拍照并且图片返回)