android 解决小米手机上选择照片路径为null的问题
之前做了一个获取相册选择图片的功能,后来测试人员在小米的手机 测试时出现崩溃现象。自己就在网上查找资料,发现是小米的获取图片路径的代码与其他的手机不一样,于是修改了代码,解决了这个问题,这里记录一下。
这是在onActivityResult方法中执行的,
if (data == null) {return;}uri = data.getData();uri = geturi(data);//解决方案String[] proj = { MediaStore.Images.Media.DATA };Cursor cursor = query(uri, proj, null, null, null);if(cursor!=null){int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);cursor.moveToFirst();String path = cursor.getString(column_index);// 图片在的路径Intent intent3 = new Intent(this, SYClipActivity.class);intent3.putExtra("path", path);startActivityForResult(intent3, IMAGE_COMPLETE);}
这里面如果不加uri = geturi(data);这个代码,在其他的手机上是没有问题的,但是在小米手机会崩溃。
/*** 解决小米手机上获取图片路径为null的情况* @param intent* @return*/public Uri geturi(android.content.Intent intent) { Uri uri = intent.getData(); String type = intent.getType(); if (uri.getScheme().equals("file") && (type.contains("image/"))) { String path = uri.getEncodedPath(); if (path != null) { path = Uri.decode(path); ContentResolver cr = this.getContentResolver(); StringBuffer buff = new StringBuffer(); buff.append("(").append(Images.ImageColumns.DATA).append("=") .append("'" + path + "'").append(")"); Cursor cur = cr.query(Images.Media.EXTERNAL_CONTENT_URI, new String[] { Images.ImageColumns._ID }, buff.toString(), null, null); int index = 0; for (cur.moveToFirst(); !cur.isAfterLast(); cur.moveToNext()) { index = cur.getColumnIndex(Images.ImageColumns._ID); // set _id value index = cur.getInt(index); } if (index == 0) { // do nothing } else { Uri uri_temp = Uri .parse("content://media/external/images/media/" + index); if (uri_temp != null) { uri = uri_temp; } } } } return uri; }
这里面是先判断相册返回的intent的type,如果是小米手机,则type包含("image/")),它的Scheme也是file。然后获取到图片的路径,然后解析路径得到图片在手机的uri的ID,通过ContentResolver查询图片的ID得到图片的URI的索引,然后返回图片的URI.这样就处理了小米手机获取图片URI的代码。其他手机直接 uri = data.getData(); 就获取到了URI.
有点麻烦,自己都有些不懂的,大家可以去网上查找资料看看。
android 解决小米手机上选择照片路径为null的问题就讲完了,就这么简单。
android 解决小米手机上选择照片路径为null的问题相关推荐
- android小米手机上传图片,android 解决小米手机上选择照片路径为null的问题
释放双眼,带上耳机,听听看~! 之前做了一个获取相册选择图片的功能,后来测试人员在小米的手机 测试时出现崩溃现象.自己就在网上查找资料,发现是小米的获取图片路径的代码与其他的手机不一样,于是修改了代码 ...
- android 解决小米手机上选择照片路径为null情况
昨天测试帅哥说他手机选择图库崩溃了,这是一个上传头像的功能,相信很多应用都有这个功能,于是我就把手机拿过来打log看了下返回的路径 为null,在网上搜索了下解决方案,现在把解决方案记录下: 这是在o ...
- Android 解决小米手机添加图片水印后显示黑边的问题
背景 由于选择图片后需要需要在图片上添加logo,经纬度坐标,天气.时间等内容(图片水印) 测试反馈在小米手机上选择图片上传后有图片在右边和下边有一条黑边 具体查看下图 调用代码如下使用O.V.H.及 ...
- exif.js解决ios手机上传照片后显示为旋转90度问题(兼容ios13.4之前的版本 )
exif.js解决ios手机上传照片后显示为旋转90度问题(兼容ios13.4 ) 问题描述: 在做手机移动端app时,发现iOS12.5.1版本(iphone6)上传照片出现顺时针旋转90问题,ip ...
- [Android]解决小米手机神坑问题:Installation failed with message Failed to establish session
问题描述:小米手机可以从应用商城下载安装APK,但是用Android Studio编译安装就不行!出现这个错误: Installation failed with message Failed to ...
- android华为获取相册,解决华为手机获取相册图片路径为null
最近代码君遇到一个问题,在其他手机调用系统相册获取图片路径都是可以的,但是华为手机,执行相同代码,会报空指针异常,网上找了很多资料,都没什么实用的效果 Intent intent; intent = ...
- Android解决华为手机上出现Register too many Broadcast Receivers的crash
记录一下,方便下次找到! 这里只提供解决方法,需要相关原理请移动本文末尾! 第一步: 在项目lib的gradle引入库 dependencies {// add dependenciesimpleme ...
- 解决华为手机获取相册图片路径为null
最近代码君遇到一个问题,在其他手机调用系统相册获取图片路径都是可以的,但是华为手机,执行相同代码,会报空指针异常,网上找了很多资料,都没什么实用的效果 Intent intent; intent = ...
- 小米手机相册选择并裁剪图片
/** * 裁剪原始的图片 */ public static final int PHOTOZOOM = 2; // 缩放 public static final int PHOTORESOULT = ...
最新文章
- visualstudio发布网站到服务器,发布到网站 - Visual Studio (Windows) | Microsoft Docs
- JavaSE(十五)——注解
- IdentityServer 部署踩坑记
- VC Studio 使用技巧大全
- (48)FPGA面试题sram,falsh memory,及dram的区别
- 洛谷月赛 P3406 海底高铁
- Windows下android模拟器环境搭建
- 利用Python分析航空公司客户价值
- 5.7 C和C++的关系
- 足球大数据分析大小球胜平负的技巧与经验实例附分析软件
- java毕业设计小区停车场管理系统mybatis+源码+调试部署+系统+数据库+lw
- java hashmap value排序_按照Value对HashMap排序
- 虚拟机的安装及使用介绍
- 使用js计算字符串的长度
- HDU-4567-思维-Brilliant Programmers Show -13长沙邀请赛
- 【python练习笔记】神秘的王宫
- iOS swift MD5加密
- 新一代iPad Pro外形泄露:方形后摄瞩目
- 除了性生活就是打麻将:中国 2000 多个县城生活实录
- TensorFlow实现:卷积神经网络识别手势动作(有代码与演示)