让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
从DownloadsProvider中获取真实路径可以使用以下方法:
private String getRealPathFromURI(Context context, Uri uri) {
String filePath = null;
if (DocumentsContract.isDocumentUri(context, uri)) {
String documentId = DocumentsContract.getDocumentId(uri);
if (uri.getAuthority().equals("com.android.providers.downloads.documents")) {
Uri contentUri = ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"), Long.parseLong(documentId));
filePath = getDataColumn(context, contentUri, null, null);
} else if (uri.getAuthority().equals("com.android.providers.media.documents")) {
String id = documentId.split(":")[1];
String selection = MediaStore.Images.Media._ID + "=?";
String[] selectionArgs = { id };
Uri contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
filePath = getDataColumn(context, contentUri, selection, selectionArgs);
}
} else if ("content".equalsIgnoreCase(uri.getScheme())) {
filePath = getDataColumn(context, uri, null, null);
}
return filePath;
}
private String getDataColumn(Context context, Uri uri, String selection, String[] selectionArgs) {
String[] projection = { MediaStore.Images.Media.DATA };
Cursor cursor = null;
String filePath = null;
try {
cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, null);
if (cursor != null && cursor.moveToFirst()) {
int index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
filePath = cursor.getString(index);
}
} finally {
if (cursor != null) {
cursor.close();
}
}
return filePath;
}
这段代码可以处理从DownloadsProvider中获取到的uri,包括处理不同类型的文档提供者(downloads和media),并正确地获取到真实路径。您可以在您的应用中使用这段代码来获取真实路径。