1月 242017
之前工作时遇到的问题,趁着春节工作压力不大,总结一下。
声明:本文部分代码取自Android开发之获取相册照片和获取拍照照片 并做了修改
1、从相册或是文件管理器获取
在android中从本地获取图片(不管是相册或是文件系统),调用如下Intent即可:
1 2 3 4 5 | 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
1 2 3 4 5 6 7 8 | 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对象即可。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | //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的基本调用与实现拍照功能以及获取拍照图片加载大图片