您的位置:首页 > 移动开发 > Android开发

Android:content uri转 file uri

2015-10-23 12:05 316 查看

Android:content uri转 file uri

在android开发中我们在处理一图片时,经常需要将android uri如content://media/external/image/media/102这样格式转换
成File类型或者获取真实文件路径。网上有不少示例代码,但是我看到的都是只支持英文的,如果路径中含中文,会出现空指针异常:

网上的代码:
Uri uri = data.getData();
String[] proj = { MediaStore.Images.Media.DATA };
Cursor actualimagecursor = managedQuery(uri,proj,null,null,null);
int actual_image_column_index = actualimagecursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
actualimagecursor.moveToFirst();
String img_path = actualimagecursor.getString(actual_image_column_index);
File file = new File(img_path);

现在我们可以采用另一种方法实现支持中文的路径:
private Uri saveBitmap(Bitmap bm)
{
File tmpDir = new File(Environment.getExternalStorageDirectory() + "/com.cumt.csdn");
if(!tmpDir.exists())
{
tmpDir.mkdir();
}
File img = new File(tmpDir.getAbsolutePath() + "csdn.png");
try {
FileOutputStream fos = new FileOutputStream(img);
bm.compress(Bitmap.CompressFormat.PNG, 85, fos);
fos.flush();
fos.close();
return Uri.fromFile(img);
} catch (FileNotFoundException e) {
e.printStackTrace();
return null;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
//把content类型的uri装换为file类型的uri
private Uri convertUri(Uri uri){
InputStream is = null;
try {
is = getContentResolver().openInputStream(uri);
Bitmap bitmap = BitmapFactory.decodeStream(is);
is.close();
return saveBitmap(bitmap);
} catch (FileNotFoundException e) {
return null;
} catch (IOException e) {
return null;
}
}


在效率上很明显后者效率不高,需要保存图片再获取其file uri。我们可以两者结合使用:
<span style="white-space:pre">	</span>Uri uri;
uri = data.getData();
try {
String res = null;
String[] proj = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(uri, proj, null, null, null);
if(cursor.moveToFirst()){;
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
res = cursor.getString(column_index);
}
cursor.close();
File file = new File(res);
Uri fileUri = Uri.fromFile(file);
} catch (Exception e) {
<span style="white-space:pre">	</span>Uri fileUri = convertUri(uri);
}


目前在项目中是这样使用的,还没有找到更好的办法。。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: