Android:content uri转 file uri
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);
}目前在项目中是这样使用的,还没有找到更好的办法。。。。
455



被折叠的 条评论
为什么被折叠?



