原理:通过对不同的Uri进行辨别,提取ID, 需要android.permission.MANAGE_EXTERNAL_STORAGE权限 Android.externalstorage类型conte
原理:通过对不同的Uri进行辨别,提取ID,
需要android.permission.MANAGE_EXTERNAL_STORAGE权限
直接获取"primary:"后的路径即可,后面即是相对路径.
与下一个类似,获取ID后进入数据表中查找.
进入MediaStore.Files表中进行查询_data字段,旧版通过直接查询uri的方法获取_data已经无效.
下面贴的代码适合所有类型的文件,若只需要查询某种媒体的文件,只需要换一个查询表即可.
MediaStore.Files.getContentUri("external")MediaStore.Files.getContentUri("internal")MediaStore.Video.Media.EXTERNAL_CONTENT_URIMediaStore.Video.Media.INTERNAL_CONTENT_URIMediaStore.Images.Media.EXTERNAL_CONTENT_URIMediaStore.Images.Media.INTERNAL_CONTENT_URIMediaStore.Audio.Media.EXTERNAL_CONTENT_URIMediaStore.Audio.Media.INTERNAL_CONTENT_URIMediaStore.Downloads.Media.EXTERNAL_CONTENT_URIMediaStore.Downloads.Media.INTERNAL_CONTENT_URI
public static String Uri2Path(Context context, Uri uri) { if (uri == null) { return null; } if(ContentResolver.SCHEME_FILE.equals(uri.getScheme())) { return uri.getPath(); } else if(ContentResolver.SCHEME_CONTENT.equals(uri.getScheme())) { String authority = uri.getAuthority(); if(authority.startsWith("com.android.externalstorage")) { return Environment.getExternalStorageDirectory() + "/" + uri.getPath().split(":")[1]; } else { String idStr = ""; if(authority.equals("media")) { idStr = uri.toString().substring(uri.toString().lastIndexOf('/') + 1); } else if(authority.startsWith("com.android.providers")) { idStr = DocumentsContract.getDocumentId(uri).split(":")[1]; } ContentResolver contentResolver = context.getContentResolver(); Cursor cursor = contentResolver.query(MediaStore.Files.getContentUri("external"), new String[] {MediaStore.Files.FileColumns.DATA}, "_id=?", new String[]{idStr}, null); if (cursor != null) { cursor.moveToFirst(); try { int idx = cursor.getColumnIndex(MediaStore.Files.FileColumns.DATA); return cursor.getString(idx); } catch (Exception e) { } finally { cursor.close(); } } } } return null; }
来源地址:https://blog.csdn.net/qq_18571109/article/details/127452296
--结束END--
本文标题: 【Android 11/12】 通过Uri获取绝对路径的方法
本文链接: https://lsjlt.com/news/398885.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-01-21
2023-10-28
2023-10-28
2023-10-27
2023-10-27
2023-10-27
2023-10-27
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0