在项目中需要用到将Uri转换为绝对路径,在网上找到一个方法,做个笔记

网上有不少方法,但是有的对4.4后的版本无效,这里的方法可以在4.4之后的版本将Uri转换为绝对路径
public class GetPathFromUri {
/**
* 专为Android4.4设计的从Uri获取文件绝对路径
*/
public static String getPath(final Context context, final Uri uri) {
final boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;
// DocumentProvider
if (isKitKat && DocumentsContract.isDocumentUri(context, uri)) {
// ExternalStorageProvider
if (isExternalStorageDocument(uri)) {
final String docId = DocumentsContract.getDocumentId(uri);
final String[] split = docId.split(":");
final String type = split[0];
if ("primary".equalsIgnoreCase(type)) {
return Environment.getExternalStorageDirectory() + "/" + split[1];
}
}
// DownloadsProvider
else if (isDownloadsDocument(uri)) {
final String id = DocumentsContract.getDocumentId(uri);
final Uri contentUri = ContentUris.withAppendedId(
Uri.parse("content://downloads/public_downloads"), Long.valueOf(id));
return getDataColumn(context, contentUri, null, null);
}
// MediaProvider
else if (isMediaDocument(uri)) {
final String docId = DocumentsContract.getDocumentId(uri);
final String[] split = docId.split(":");
final String type = split[0];
Uri contentUri = null;
if ("image".equals(type)) {
contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
} else if ("video".equals(type)) {
contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
} else if ("audio".equals(type)) {
contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
}
final String selection = "_id=?";
final String[] selectionArgs = new String[]{split[1]};
return getDataColumn(context, contentUri, selection, selectionArgs);
}
}
// MediaStore (and general)
else if ("content".equalsIgnoreCase(uri.getScheme())) {
return getDataColumn(context, uri, null, null);
}
// File
else if ("file".equalsIgnoreCase(uri.getScheme())) {
return uri.getPath();
}
return null;
}
/**
* Get the value of the data column for this Uri. This is useful for
* MediaStore Uris, and other file-based ContentProviders.
*
* @param context The context.
* @param uri The Uri to query.
* @param selection (Optional) Filter used in the query.
* @param selectionArgs (Optional) Selection arguments used in the query.
* @return The value of the _data column, which is typically a file path.
*/
public static String getDataColumn(Context context, Uri uri, String selection,
String[] selectionArgs) {
Cursor cursor = null;
final String column = "_data";
final String[] projection = {column};
try {
cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs,
null);
if (cursor != null && cursor.moveToFirst()) {
final int column_index = cursor.getColumnIndexOrThrow(column);
return cursor.getString(column_index);
}
} finally {
if (cursor != null)
cursor.close();
}
return null;
}
/**
* @param uri The Uri to check.
* @return Whether the Uri authority is ExternalStorageProvider.
*/
public static boolean isExternalStorageDocument(Uri uri) {
return "com.android.externalstorage.documents".equals(uri.getAuthority());
}
/**
* @param uri The Uri to check.
* @return Whether the Uri authority is DownloadsProvider.
*/
public static boolean isDownloadsDocument(Uri uri) {
return "com.android.providers.downloads.documents".equals(uri.getAuthority());
}
/**
* @param uri The Uri to check.
* @return Whether the Uri authority is MediaProvider.
*/
public static boolean isMediaDocument(Uri uri) {
return "com.android.providers.media.documents".equals(uri.getAuthority());
}
}
绝对路径转Uri比较简单
以绝对路径创建一个File对象,然后调用
Uri.fromFile(file)
以上所述是小编给大家介绍的Android Uri和文件路径互相转换的实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
# android
# uri
# 文件路径互转
# Android如何通过URI获取文件路径示例代码
# android图片文件的路径地址与Uri的相互转换方法
# android实现Uri获取真实路径转换成File的方法
# Android7.0以上Uri转路径的方法实现(已验证)
# 转换为
# 小编
# 在此
# 给大家
# 做个
# 专为
# 所述
# 创建一个
# 给我留言
# 感谢大家
# 疑问请
# 有任何
# 在网上
# 有不少
# 网上
# equalsIgnoreCase
# primary
# DocumentsContract
# getExternalStorageDirectory
# Environment
相关文章:
邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?
如何获取PHP WAP自助建站系统源码?
如何设置并定期更换建站之星安全管理员密码?
如何在Golang中实现微服务服务拆分_Golang微服务拆分与接口管理方法
大学网站设计制作软件有哪些,如何将网站制作成自己app?
c++怎么用jemalloc c++替换默认内存分配器【性能】
建站之星如何配置系统实现高效建站?
开心动漫网站制作软件下载,十分开心动画为何停播?
台州网站建设制作公司,浙江手机无犯罪记录证明怎么开?
网站制作培训多少钱一个月,网站优化seo培训课程有哪些?
单页制作网站有哪些,朋友给我发了一个单页网站,我应该怎么修改才能把他变成自己的呢,请求高手指点迷津?
新网站制作渠道有哪些,跪求一个无线渠道比较强的小说网站,我要发表小说?
,制作一个手机app网站要多少钱?
网站制作外包价格怎么算,招聘网站上写的“外包”是什么意思?
如何通过商城自助建站源码实现零基础高效建站?
建站主机选择指南:服务器配置与SEO优化实战技巧
济南企业网站制作公司,济南社保单位网上缴费步骤?
如何在景安服务器上快速搭建个人网站?
英语简历制作免费网站推荐,如何将简历翻译成英文?
音响网站制作视频教程,隆霸音响官方网站?
武汉网站制作费用多少,在武汉武昌,建面100平方左右的房子,想装暖气片,费用大概是多少啊?
如何选择靠谱的建站公司加盟品牌?
制作电商网页,电商供应链怎么做?
北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?
常州企业建站如何选择最佳模板?
潍坊网站制作公司有哪些,潍坊哪家招聘网站好?
如何获取开源自助建站系统免费下载链接?
如何在Golang中处理模块冲突_解决依赖版本不兼容问题
定制建站流程解析:需求评估与SEO优化功能开发指南
如何在七牛云存储上搭建网站并设置自定义域名?
建站主机如何安装配置?新手必看操作指南
网站制作费用多少钱,一个网站的运营,需要哪些费用?
西安大型网站制作公司,西安招聘网站最好的是哪个?
网站视频怎么制作,哪个网站可以免费收看好莱坞经典大片?
香港服务器WordPress建站指南:SEO优化与高效部署策略
无锡营销型网站制作公司,无锡网选车牌流程?
SAX解析器是什么,它与DOM在处理大型XML文件时有何不同?
电商网站制作价格怎么算,网上拍卖流程以及规则?
建站之星代理商如何保障技术支持与售后服务?
如何高效利用200m空间完成建站?
如何在Golang中使用encoding/gob序列化对象_存储和传输数据
佛山企业网站制作公司有哪些,沟通100网上服务官网?
美食网站链接制作教程视频,哪个教做美食的网站比较专业点?
建站主机是什么?如何选择适合的建站主机?
建站主机核心功能解析:服务器选择与网站搭建流程指南
大型企业网站制作流程,做网站需要注册公司吗?
在线制作视频的网站有哪些,电脑如何制作视频短片?
已有域名和空间如何搭建网站?
企业网站制作公司网页,推荐几家专业的天津网站制作公司?
如何登录建站主机?访问步骤全解析
*请认真填写需求信息,我们会在24小时内与您取得联系。