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的基本调用与实现拍照功能以及获取拍照图片加载大图片


 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(required)

(required)