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

来源:互联网 发布:算法工程师转产品经理 编辑:程序博客网 时间:2024/05/16 06:52
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);  //打开相册}@Overridepublic 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:    }}@Overrideprotected 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。 代码注释很清楚。
参考自第一行代码
                                             
0 0