Android中中Uri和和Path之间的转换的示例代码之间的转换的示例代码
Android中中Uri和和Path之间的转换之间的转换
原因原因
调用系统拍照应用,拍照后要保存图片,那么我们需要指定一个存储图片路径的Uri。这就涉及到如何将file path转换为Uri。有
时候我们还需要根据照片的路径得到照片的media Uri,那么又该如何转换呢?
Android Uri to Path
现在遇到的常规Uri有两种:
媒体文件的Uri是content://, 表示这是一个数据库数据。去数据库查询正常返回。
其他的文件Uri是file://, 表示这个是一个文件。这个uri是通过Uri.fromFile(File file)方法生成。
Media Uri To Path
在我简书中有一篇文章Android Uri to Path当中介绍了如何把从相册返回的Uri转换为Media Uri,然后再通过获得的Media Uri
获取图片的Path。最终通过BitmapFractory创建相应的Bitmap对象。
File Uri To Path
这个转换相对比较简单,我们可以直接利用Android SDK提供的Uri.getPath()方法来获取相应的路径,然后利用Java IO来获取
输入流,创建Bitmap。如果想直接通过File Uri获取输入流,我们可以通过调用ContentResolves.openInputStream(Uri uri)返
回得到输入流。
bitmap = BitmapFactory.decodeStream(
getContentResolver().openInputStream(
GetImageUri.getImageStreamFromExternal("Screenshots/Screenshot.png"))
);
这里的GetImageUri.getImageStreamFromExternal是我自己写的一个工具类:
public static Uri getImageStreamFromExternal(String imageName) {
File externalPubPath = Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES
);
File picPath = new File(externalPubPath, imageName);
Uri uri = null;
if(picPath.exists()) {
uri = Uri.fromFile(picPath);
}
return uri;
}
通过该静态方法可以将外部存储路径下的Pictures目录下的文件的路径转换为File Uri。
Android Path To Uri
File Path To File Uri
直接上代码:
public static Uri getImageStreamFromExternal(String imageName) {
File externalPubPath = Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES
);
File picPath = new File(externalPubPath, imageName);
Uri uri = null;
if(picPath.exists()) {
uri = Uri.fromFile(picPath);
}
return uri;
}
评论0