今天在做项目的时候发现个问题,用相机上传头像好好的,用相册就会闪退。经过调试发现5.0的和其他版本返回的Uri不一样:
onActivityResult中处理的代码如下:
Uri uri = data.getData(); if (null != uri) { // ContentResolver resolver = getContentResolver(); // // try { // Bitmap bm = MediaStore.Images.Media.getBitmap(resolver, uri); // } catch (IOException e) { // e.printStackTrace(); // } // int sdkVersion = Integer.valueOf(android.os.Build.VERSION.SDK); String path = ""; if (sdkVersion == 21 || sdkVersion == 22){ path = uri.getPath();//5.0直接返回的是图片路径,5.0以下是一个和数据库有关的索引值,6.0也是一个索引值 }else { String[] proj = {MediaStore.Images.Media.DATA}; //好像是android多媒体数据库的封装接口,具体的看Android文档 Cursor cursor = managedQuery(uri, proj, null, null, null); //按我个人理解 这个是获得用户选择的图片的索引值 int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); //将光标移至开头 ,这个很重要,不小心很容易引起越界 cursor.moveToFirst(); //最后根据索引值获取图片路径 path = cursor.getString(column_index); } carFile = new File(path);