android怎样调用系统相册

网上的代码有好多都有问题,在activity返回中没有进行判断,例如魅族pro6调用系统相册后返回的路径为content路径,下面将所有的代码贴上


private final int PHOTO_REQUEST_GALLERY = 0;

启动系统相册activity

Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType("image/*");
// 开启一个带有返回值的Activity,请求码为PHOTO_REQUEST_GALLERY
startActivityForResult(intent, PHOTO_REQUEST_GALLERY);

处理调用系统相册后返回

@Override
protected void onActivityResult(int requestCode, int resultCode, final Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == PHOTO_REQUEST_GALLERY) {
        UIUtils.post(new Runnable() {
            @Override
            public void run() {
                if (data != null) {
                    // 得到图片的全路径
                    final Uri uri = data.getData();
                    String scheme = uri.getScheme();
                    String path;
                    if ("content".equals(scheme)){
                        path = FileUtil.getContentUrlPath(IdeaActivity.this,uri);
                    }else {
                        path = uri.getPath();
                    }
                    picUrls.add(BitmapUtil.getUpdateImage(path));
                    setPictures();
                }

            }
        });
    }
}

为毛要在handler中写呢,因为处理图片尤其是大图片时,如果不在hander中写,会显示一下桌面

获取到uri时,要判断uri的scheme是否为content,如果为content,需要在系统数据库中查询图片路径

public static String getContentUrlPath(Activity activity,Uri uri){
    String path = null;
    Cursor cursor = activity.getContentResolver().query(uri, null, null, null,null);
    if (cursor != null && cursor.moveToFirst()) {
        path = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA));
    }
    return path;
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值