Android获取手机相册图片

本文介绍如何在Android应用中实现从相册选择图片并进行适当的尺寸调整以避免内存溢出的方法。具体步骤包括:在AndroidManifest.xml中声明必要的权限、通过Intent启动系统相册选择图片、从返回的URI获取图片的真实路径、以及按需调整图片大小。
摘要由CSDN通过智能技术生成

1. AndroidManifest.XML中添加权限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

 

2. 使用Intent

Activity Action里面有一个“ACTION_GET_CONTENT”字符串常量,该常量让用户选择特定类型的数据,并返回该数据的URI.我们利用该常量,

然后设置类型为image/*”,就可获得android手机内的所有image

Intent intent1 = new Intent();
intent1.setAction(Intent.ACTION_GET_CONTENT);
intent1.addCategory(Intent.CATEGORY_OPENABLE);
intent1.setType("image/*");

onCreate中开启onActivityResult

startActivityForResult(intent1,111);

复写onActivityResult读取选择图片的uri

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data){
    super.onActivityResult(requestCode,resultCode,data);
    switch (requestCode){
        case 111:
            if(resultCode ==RESULT_CANCELED) {
                Toast.makeText(getApplication(), "点击取消从相册选择", Toast.LENGTH_LONG).show();
                return;
            }
            try{
                Uri uri = data.getData();
                Log.e("TAG",uri.toString());

                String filePath = getRealPathFromURI(uri);
                bitmap1 = getresizePhoto(filePath);
                imageView1.setImageBitmap(bitmap1);
                if(bitmap1!=null){
                    Log.e("aa","bitmap1不为空!!!!!!!!!!");
                }else{
                    Log.e("aa","bitmap1为空!!!!!!!!!!");
                }
            }catch (Exception e){
                e.printStackTrace();
            }
            break;
    }
}

某个uri格式:uri: content://media/external/images/media/614016

某个图片路径 /storage/emulated/0/DCIM/P70713-115542.jpg

URI获取String类型的文件路径

public String getRealPathFromURI(Uri contentUri){
    Cursor cursor = null;
    try{

        String [] proj = {MediaStore.Images.Media.DATA};

//由context.getContentResolver()获取contentProvider再获取cursor(游

//标)用游标获取文件路径返回
        cursor = context.getContentResolver().query(contentUri,proj,null,null,null);
        cursor.moveToFirst();
        int column_indenx = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        return cursor.getString(column_indenx);
    } finally {

        if (cursor != null) {

            cursor.close();
        }
    }
}

 

3. 根据文件路径调整图片大小防止OOM并且返回bitmap

private  Bitmap getresizePhoto(String ImagePath){
    if (ImagePath!=null){
        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;
        BitmapFactory.decodeFile(ImagePath,options);
        double ratio = Math.max(options.outWidth*1.0d/1024f,options.outHeight*1.0d/1024);
        options.inSampleSize = (int) Math.ceil(ratio);
        options.inJustDecodeBounds= false;
        Bitmap bitmap=BitmapFactory.decodeFile(ImagePath,options);
        return bitmap;
    }
    return null;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值