android---从相册中选择图片


private ImageView picture;

public static final int CHOOSE_PHOTO=2;

picture=(ImageView)findViewById(R.id.imageView);


run_Permissions();


//从相册选择照片
private void run_Permissions(){
    Button Album=(Button)findViewById(R.id.album);
    Album.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            //动态申请对SD卡读写的权限
            if(ContextCompat.checkSelfPermission(MainActivity.this, android.Manifest.permission.WRITE_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED){
                ActivityCompat.requestPermissions(MainActivity.this,new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE},1);
            }else {
                openAlbum();
            }
        }
    });
}
private void openAlbum(){
    Intent intent=new Intent("android.intent.action.GET_CONTENT");
    intent.setType("image/*");
    startActivityForResult(intent,CHOOSE_PHOTO);  //打开相册
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    switch (requestCode){
        case 1:
            if(grantResults.length>0 &&grantResults[0] == PackageManager.PERMISSION_GRANTED){
                openAlbum();
            }else {
                Toast.makeText(this, "You denied the permission", Toast.LENGTH_SHORT).show();
            }
            break;
        default:
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    switch (requestCode){
        case CHOOSE_PHOTO:
            handleImageOnKitKat(data);
    }
}
private void handleImageOnKitKat(Intent data){   //处理图片
    String imagePath = null;
    Uri uri=data.getData();
    if (DocumentsContract.isDocumentUri(this, uri)) {     //如果是document类型的Uri,则通过document id处理
        String docId = DocumentsContract.getDocumentId(uri);
        if ("com.android.providers.media.documents".equals(uri.getAuthority())) {
            String id = docId.split(":")[1];   //解析出数字格式的id
            String selection = MediaStore.Images.Media._ID + "=" + id;
            imagePath = getImagePath(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, selection);
        } else if ("com.android.providers.downloads.documents".equals(uri.getAuthority())) {
            Uri contentUri = ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"), Long.valueOf(docId));
            imagePath = getImagePath(contentUri, null);
        }
    } else if ("content".equalsIgnoreCase(uri.getScheme())) {  //如果是cntent类型的Uri,则使用普通方式处理
        imagePath = getImagePath(uri, null);
    } else if ("file".equalsIgnoreCase(uri.getScheme())) {   //如果是file类型的Uri,直接获取图片路径即可
        imagePath = uri.getPath();
    }
    displayImage(imagePath);
}

private String getImagePath(Uri uri,String selection){   //通过Uri和selection来获取真实的图片路径
    String path=null;
    Cursor cursor=getContentResolver().query(uri,null,selection,null,null);
    if(cursor != null){
        if(cursor.moveToFirst()){
            path=cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));
        }
        cursor.close();
    }
    return path;
}
private void displayImage(String imagePath){   //显示图片
    if(imagePath != null){
        Bitmap bitmap= BitmapFactory.decodeFile(imagePath);
        picture.setImageBitmap(bitmap);
    }else {
        Toast.makeText(this, "failed to get image", Toast.LENGTH_SHORT).show();
    }
}
布局就一个按钮Button,一个ImageView。 代码注释很清楚。
 
  
参考自第一行代码
 
 

你可能感兴趣的:(android---从相册中选择图片)