android 解决小米手机上选择照片路径为null情况

昨天测试帅哥说他手机选择图库崩溃了,这是一个上传头像的功能,相信很多应用都有这个功能,于是我就把手机拿过来打log看了下返回的路径 为null,在网上搜索了下解决方案,现在把解决方案记录下:
这是在onActivityResult方法中执行的,

if (data == null) {  
                return;  
            }  
            uri = data.getData();  
            uri = geturi(data);//解决方案  
            String[] proj = { MediaStore.Images.Media.DATA };  
            Cursor cursor = managedQuery(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);  
            }  
/**  
     * 解决小米手机上获取图片路径为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;    
        }    

果然是生活处处有大神;
http://blog.csdn.net/coderinchina/article/details/50799501

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值