1月 242017
之前工作时遇到的问题,趁着春节工作压力不大,总结一下。
声明:本文部分代码取自Android开发之获取相册照片和获取拍照照片 并做了修改
1、从相册或是文件管理器获取
在android中从本地获取图片(不管是相册或是文件系统),调用如下Intent即可:
public static void getImageFromAlbum(Activity activty, int requestCode) { Intent intent = new Intent(Intent.ACTION_PICK); intent.setType("image/*");// 相片类型 activty.startActivityForResult(intent, requestCode); }
调用该Intent后,将显示相册、文件系统图标,用户选择后将返回,我们在onActivityReSult中可以获取用户选中图片的Uri
public void onActivityResult(int requestCode, int resultCode, Intent data){ if(Activity.RESULT_OK == resultCode){ if( ALBUM_IMAGE_REQ_CODE == requestCode){ //do something to the album image Uri imageUri = data.getData(); } } }
2、调用系统拍照功能获取照片
同样需要以Intent的方式实现,下面的getImageFromCamera方法在调用Intent时如果不设置MediaStore.EXTRA_OUTPUT,那么在onActivityResult中通过Intent获取的图片只是一个缩略图,并不是清晰图片,要想拿到清晰照片必须将其先保存到SD卡上,通过设置MediaStore.EXTRA_OUTPUT、传入一个SD卡路径的Uri对象即可。
//storageUri必须是一个SD卡地址,以便保存清晰照片 protected void getImageFromCamera(Activity activity, int requestCode, Uri storageUri) { String state = Environment.getExternalStorageState(); if (state.equals(Environment.MEDIA_MOUNTED)) { Intent getImageByCamera = new Intent("android.media.action.IMAGE_CAPTURE"); getImageByCamera.putExtra(MediaStore.EXTRA_OUTPUT, storageUri); activity.startActivityForResult(getImageByCamera, requestCode); } else { Toast.makeText(activity.getApplicationContext(), "请确认已经插入SD卡", Toast.LENGTH_LONG).show(); } } //辅助方法,用于生成一个SD卡路径的Uri对象 private static Uri getImageStorageUri(String sdSaveDir, String imageName){ Uri uri = null; String sdState = Environment.getExternalStorageState(); if(sdState.equals(Environment.MEDIA_MOUNTED)){ String imagePath = Environment.getExternalStorageDirectory().getPath()+"/"+sdSaveDir; File file = new File(imagePath); if(!file.exists()){ file.mkdir(); } imagePath = imagePath + "/"+imageName; uri = Uri.fromFile(new File(imagePath)); } else { //TODO throw exception or do something } return uri; }
参考资料:
Android开发之获取相册照片和获取拍照照片
Android开发之获取相册照片和获取拍照照片二
Android从相册获取图片
Android从相册中获取图片以及路径
Android Camera开发系列(上)——Camera的基本调用与实现拍照功能以及获取拍照图片加载大图片