未经本人授权,不得转载!否则必将维权到底

有个需求,可以从系统相册选择图片,上传到服务器。那么选择从系统相册选择完图片后,图片的名字需要显示在页面上。这里出了个 Bug,华为手机用系统的方法,获取相册图片路径,返回 null。用别的品牌的手机,却又是正常的。

##问题展示:

#解决步骤:
#####1、Debug 跟了一遍代码,发现代码里面获取相册图片的路径为 null,因为做了非空判断,所以直接返回 null 了。
#####2、Google ,发生此 bug 的根本原因是版本不同导致的 Uri 的问题。Android 4.3 及以下,根据 Uri 来查询系统相册,得到照片的 path 完全没有问题。而 Android 4.4 返回的 Uri 跟 Android 4.3 及以下完全不一样。Android 4.3 返回的是文件路径,而 Android 4.4 返回的却是“content://com.android.providers.media.documents/document/image:xxxxx”,拿这个 Uri 去查询系统相册,图片路径返回肯定为 null 了。

##可行方案:通过下面的方法将 Uri 转换成我们需要的 path 即可

 public static String getImagePathFromURI(Activity activity,Uri uri) {Cursor cursor = activity.getContentResolver().query(uri, null, null, null, null);String path = null;if (cursor != null) {cursor.moveToFirst();String document_id = cursor.getString(0);document_id = document_id.substring(document_id.lastIndexOf(":") + 1);cursor.close();cursor = activity.getContentResolver().query(android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI,null, MediaStore.Images.Media._ID + " = ? ", new String[]{document_id}, null);if (cursor != null) {cursor.moveToFirst();path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));cursor.close();}}return path;}

#逻辑完整代码:

 /*** @param uri* @param multipartContent* @return* @throws Exception */public static String uploadImageInWeb(String uploadKey,Uri uri,Activity context, CustomMultipartEntity multipartContent) throws Exception {String[] proj = { MediaStore.Images.Media.DATA };Cursor actualimagecursor = context.managedQuery(uri,proj,null,null,null);int actual_image_column_index = actualimagecursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);actualimagecursor.moveToFirst();String  img_path = "";//如果是华为手机,调用上面给出的方法,即可得到正确的图片途径if(isHuaWeiPhone()){img_path = getImagePathFromURI(context,uri);}else{img_path = actualimagecursor.getString(actual_image_column_index);}if (img_path==null) {return null;}File imageFile = new File(img_path);KeithXiaoYClient client = KeithXiaoYApplication.mClient;String url = Constants.serverAdd+ "?sessionkey="+ Constants.sessionKey;LogUtils.i("keithxiaoy", "上传的网址是----->" + url + "/");Map<String, String> params = new HashMap<String, String>();params.put("uploadFileName", imageFile.getName());params.put("uploadContentType", "image/png");params.put("uploadKey", uploadKey);params.put("method", "upload");multipartContent.addPart("uploadFile", new FileBody(imageFile));JSONObject object = client.uploadMediaFiles(url, params,multipartContent);JSONArray jsonArray = object.getJSONArray("upload");if (jsonArray != null) {LogUtils.i("keithxiaoy", "上传成功");} else {LogUtils.i("keithxiaoy", "上传失败");}return imageFile.getName();}

##解决后的效果展示:

Android 华为手机获取相册图片路径,获取不到问题相关推荐

  1. android华为获取相册,解决华为手机获取相册图片路径为null

    最近代码君遇到一个问题,在其他手机调用系统相册获取图片路径都是可以的,但是华为手机,执行相同代码,会报空指针异常,网上找了很多资料,都没什么实用的效果 Intent intent; intent = ...

  2. 解决华为手机获取相册图片路径为null

    最近代码君遇到一个问题,在其他手机调用系统相册获取图片路径都是可以的,但是华为手机,执行相同代码,会报空指针异常,网上找了很多资料,都没什么实用的效果 Intent intent; intent = ...

  3. android 小米手机选择相册图片截取照片不进onActivityResult报“保存时发生错误,保存失败”

    小米选择相册时如果不使用系统截屏,直接压缩不会报"保存时发生错误,保存失败"的错误,如果截屏就会报如上错误. 需要把URI地址转为图片地址,再包成file文件转为URI Uri u ...

  4. Android开发 调用系统相机相册图片功能,解决小米手机拍照或者图片横竖相反问题,及小米手机相册图片路径问题

    Android开发 调用系统相机相册图片功能,解决小米手机拍照或者图片横竖相反问题,及小米手机相册图片路径问题 1.调用相机,兼容7.0 AndroidManifest配置 <providera ...

  5. Android拍照和获取相册图片

    之前遇到各种拍照啊,获取相册图片之类,都是直接去度娘,要么之前的代码复制下,没好好总结过. 再也不要问度娘了,再也不用一堆博客里找啊找了... ---------------------------- ...

  6. 云豹app直播源码Android 端获取相册图片功能的具体实现教程

    app直播源码开发时,关于动态功能的实现,通常采用类似于朋友圈式图文+视频模式,这就需要通过访问手机相册获取用户图片进行下一步操作,接下来就请跟随小编一起,从app直播源码角度探究云豹直播系统在这个功 ...

  7. Android开发之获取相册照片和获取拍照照片

    在Android的开发过程中,我们可能会读取手机里面的照片或者通过相机拍摄获取照片,这是两种常用的获取图片的方式,在做项目过程中也会经常遇到,下面来介绍一下这两种获取方式.. 1.从本地相册获取照片: ...

  8. 关于Android4.4的图片路径获取,如果回来的Uri的格式有两种

    关于Android4.4的图片路径获取,如果回来的Uri的格式有两种 1.content://com.android.providers.media.documents/document/p_w_pi ...

  9. Android之如何分析手机系统相册图片和视频删除后保存的位置然后恢复文件,目前已经适配小米、OPPO、VIVO、一加、努比亚、魅族等手机。

    1 需求 需要获取各种型号手机系统相册图片和视频删除后保存的位置 2 分析 1)我们可以通过在sdcard目录下进行相关查找文件夹关键字,对 "cycle"或者"tras ...

最新文章

  1. 2021年大数据常用语言Scala(二十):函数式编程 介绍
  2. Win7屏幕键盘 在哪 使用
  3. c#NPOI读取excel 比interop和Microsoft.Jet.OLEDB.4.0 之类 的好的多
  4. Spring Cloud Feign的文件上传实现
  5. e-mobile帐号状态存在异常_个体工商经营户解除异常名录操作步骤(暂执行)
  6. 电脑反应慢卡怎么解决_电脑开不了机怎么解决?
  7. java.security.InvalidKeyException: Illegal key size
  8. 马斯克开始行动:下调Twitter Blue订阅费 禁止广告
  9. 关于Delphi XE2的FMX的一点点研究之消息篇
  10. RichTextBox中插入图片
  11. Boosting Adversarial Attacks with Momentum论文解读
  12. 在线报表设计实战系列 – ②制作表格类报表
  13. 信息安全系统设计基础第八周期中总结
  14. 【职业经验】三年数据沉淀!2020 年度测试行业问卷调查结果火热出炉!
  15. Outlook2013邮箱打开Word附件为受保护模式的调整方法
  16. 数据结构与算法的学习——思维的学习与高屋建瓴
  17. 旅游业如何使用数据分析?
  18. PCB设计——购买元器件出现的问题
  19. 中学智慧校园整体解决方案
  20. MySQL非交互式查询

热门文章

  1. 计算机网络 (头歌平台)实验二
  2. 计算机趣事 英语作文,英语作文100字趣事
  3. 和平精英镜头灵敏度怎么调到最稳呢
  4. python 爬虫 短信验证码
  5. IDELAY输入延迟分析
  6. GitLab上传文件教程
  7. 在word中10秒一键将900个mathtype公式转换成word自带公式--GrindEQ公式转换神器
  8. EasyExcel的简单读取操作
  9. MySQL 索引介绍!
  10. jq 截取字符串后四位