使用环境:

跳转相册选择图片的时候,对于不同类型的图片有不同该类型的返回值:

这里说的就是vivo手机跳转相册返回的地址:

1 小米正常返回地址: file:///storage/emulated/0/Tencent/QQ_Images/null2e313c5d73f3b0d5.jpg

2 vivo手机的返回地址:  content://media/external/images/media/607657

这时候需要将content开头的图片转换成图片后缀名为jpg的图片绝对地址!

(此方法在onActivityForResult中接收到返回图片地址以后使用)

String u = uri + "";
if ((uri + "").contains("content")) {Log.e(" content转换之前"+ u);
    u = ImageUtils.getRealPathFromURI(RecallActivity.this,uri);
    Log.e(" content转换之后"+ u);
}

处理vivo手机返回地址的问题:

/**
 * vivo手机的图片选择问题
 * 返会的是:content://media/external/images/media/607657
 * 而正常返: file:///storage/emulated/0/Tencent/QQ_Images/null2e313c5d73f3b0d5.jpg
 */
public static String getRealPathFromURI(Context context, Uri contentUri) { //传入图片uri地址
    String[] proj = { MediaStore.Images.Media.DATA };
    CursorLoader loader = new CursorLoader(context, contentUri, proj, null, null, null);
    Cursor cursor = loader.loadInBackground();
    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    cursor.moveToFirst();
    return cursor.getString(column_index);
}

因为本片设计代码量比较小,所以没写demo ,如果需要直接赋值一下代码即可:

前提:

1 判断是否有照相权限,读写内存的权限,7.0以后对于隐私保护更严谨了点。

2 开启照相功能

private Uri uri;
public void toPhoto() {uri = ImageUtils.createImagePathUri(ConfirmWorkActivity.this);
    RxPermissionsUtils.requestCamera(this, new onRequestPermissionsListener() {@Override
        public void onRequestBefore() {}@Override
        public void onRequestLater() {//准确的说也就下面这个跳转是有用的Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
            startActivityForResult(intent, 0);
        }});
}

预设置Uri的方法:

public static Uri createImagePathUri(final Context context) {final Uri[] imageFilePath = {null};
    if (ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {ActivityCompat.requestPermissions((Activity) context, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
        imageFilePath[0] = Uri.parse("");
    } else {String status = Environment.getExternalStorageState();
        SimpleDateFormat timeFormatter = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINA);
        long time = System.currentTimeMillis();
        String imageName = timeFormatter.format(new Date(time));
        ContentValues values = new ContentValues(3);
        values.put(MediaStore.Images.Media.DISPLAY_NAME, imageName);
        values.put(MediaStore.Images.Media.DATE_TAKEN, time);
        values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");
        if (status.equals(Environment.MEDIA_MOUNTED)) {imageFilePath[0] = context.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
        } else {imageFilePath[0] = context.getContentResolver().insert(MediaStore.Images.Media.INTERNAL_CONTENT_URI, values);
        }}return imageFilePath[0];
}

至于为什么,sorry,不知道。

3 重写onActivityResult接收返回数据,并将返回数据转化成可以正常使用的图片地址

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {if (resultCode == RESULT_OK) {if (requestCode == 0) {capath = uri + "";
            if ((capath + "").contains("content")) {capath = ImageUtils.getRealPathFromURI(ConfirmWorkActivity.this, uri);
            } else if (capath.contains("file:///")) {capath = capath.substring(7, capath.length());
            }}}}

4 最后得到的capath 就可以直接显示。

当然,图片挺大的需要压缩,至于如何压缩目前常用并且最合适的是LuBan压缩,不懂的可以去百度。

*****跳转相册选择照片*****

1 跳转图片选择界面:

Intent intent = new Intent("android.intent.action.PICK");
intent.setType("image/*");
startActivityForResult(intent, 3);

2 onActivityResult接收返回数据,就不再提示了,如果有任何报错可参考上面转换方式。

请原谅写的这么碎,因为代码是测试很多此得出的结果,所以不停的该改改,当然,有任何疑问均可联系小弟:

QQ  532245792

另外写的怎么样,请评论一下,最近感觉狠空寂冷。

android之跳转相册选择图片/照相相关推荐

  1. Android拍照及从相册选择图片传详解(终极版)

    Android 拍照及从相册选择图片传详解 先上图 新知识点速览 URI(统一资源标识符)是标识逻辑或物理资源的字符序列,与URL类似,也是一串字符.通过使用位置,名称或两者来标识Internet上的 ...

  2. Android 拍照、从相册选择图片

    在做Android图片上传功能的时候,获取图片的途径一般都有两种:拍照.从相册选择. 一.拍照 调用相机拍照有两种方法: 直接返回图片. 在调用相机的时候,传入uri,拍照后通过该uri来获取图片. ...

  3. 点击图片跳转android,android 跳转相册选择图片并返回展示

    1.点击事件跳转 private void selectImage() { Intent intent = new Intent(); intent.setType("image/*&quo ...

  4. android拍照所需的权限,eclipse --- Android拍照,相册选择图片以及Android6.0权限管理...

    [实例简介] eclipse --- Android拍照,相册选择图片以及Android6.0权限管理 [实例截图] [核心代码] camreainandroidm └── camreainandro ...

  5. Android 7.0拍照/相册/截取图片FileProvider使用

    Android 7.0拍照/相册/截取图片FileProvider使用 Android 70拍照相册截取图片FileProvider使用 GitHub地址 HIT THE PIT 需求 实现解析 一 ...

  6. Bmob+Luban(鲁班)压缩图片实现相册选择图片压缩后上传到Bmob后台Glide加载图片显示到本地

    源代码已上传CSDN:https://download.csdn.net/download/qq_16519957/11068345 因为本章需要跟前面的知识结合起来看所以就做了一个前面链接方便大家查 ...

  7. Android 中拍照、相册选择、裁剪照片

    一个多月没总结知识点了,差点连博客账号都忘了...好了,步入正题,在 Android 中调用摄像头拍照获取图片或者是从相册中选取图片是很常见的功能,比如某些 APP 上传头像的功能就是一个例子. ** ...

  8. iOS打开照相机与本地相册选择图片

    最近正好项目里面要集成"打开照相机与本地相册选择图片"的功能,今天就在这边给大家写一个演示程序:打开相机拍摄后或者在相册中选择一张照片,然后将它显示在界面上.好了废话不多说,因为比 ...

  9. iOS 打开照相机与本地相册选择图片

    最近正好项目里面要集成"打开照相机与本地相册选择图片"的功能,今天就在这边给大家写一个演示程序:打开相机拍摄后或者在相册中选择一张照片,然后将它显示在界面上.好了废话不多说,因为比 ...

最新文章

  1. Mr Big [To be with you]
  2. MySQL基础入门学习【1】基本操作
  3. 嵌入式开发之赛灵思 xilinx Zynq芯片简介---Zynq-7000 EPP (XC7Z010 and XC7Z020)
  4. linux 命令行简介
  5. DebugHook 与 ReportMemoryLeaksOnShutdown
  6. 文件及文件组备份与还原示例.sql
  7. 面试加分项!程序员工作2年月薪12K,附架构师必备技术详解
  8. Java讲课笔记32:利用JDBC实现系统登录功能
  9. Java:JDK、JRE和JVM的关系(图示详解,一眼就能看明白!)
  10. swagger : Could not resolve reference because of: Could not resolve pointer
  11. FEMTransfer软件实现Patran/Nastran/Abaqus/Ansys/Sesam(Genie)/Workbench/Femap/盈建科/PKPM仿真分析软件的有限元模型相互转换导入
  12. mysql卸载删除注册表
  13. Java通过选择城市来计算运费(基础程序)
  14. Excel图表设置X轴位置为最底部
  15. Tomcat之——宕机自动重启和每日定时启动tomcat
  16. 最近使用的一款session工具:sa-Token
  17. 如何安装tomcat服务器
  18. 基于公用通信网络的区域级 C-V2X应用系统技术要求 应用系统技术要求
  19. 超级实习生内推的实习offer,实习经历企业认可吗?
  20. 联想K3-Note固件编译,牛扎糖或更进一步?

热门文章

  1. 逃离塔科夫服务器列表显示自己,逃离塔科夫服务器显示不全
  2. 卷积神经网络特征图可视化(自定义网络和VGG网络)
  3. 愿你的人生,是一趟愉快的旅行!
  4. springboot第6集:PO、VO、DAO、BO、DTO、POJO 能分清吗?
  5. 编译原理:词法分析概述
  6. 改进的负载线移相器设计与仿真(适用于45度以内移相)
  7. 服务器拔掉系统盘,服务器运行中拔硬盘
  8. 高性能服务器安腾,安腾崛起:将64位计算推向主流
  9. Solidwork许可不够
  10. 零基础都能拿捏的七夕浪漫代码,快去表白或去制造惊喜吧