当前位置

网站首页> 程序设计 > 开源项目 > 程序开发 > 浏览文章

Android4.4以上系统根据Uri正确获取文件路径的方法

作者:小梦 来源: 网络 时间: 2024-03-17 阅读:
public static String getPhotoPathFromContentUri(Context context, Uri uri) {    String photoPath = "";    if(context == null || uri == null) {        return photoPath;    }    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && DocumentsContract.isDocumentUri(context, uri)) {        String docId = DocumentsContract.getDocumentId(uri);        if(isExternalStorageDocument(uri)) {String [] split = docId.split(":");if(split.length >= 2) {    String type = split[0];    if("primary".equalsIgnoreCase(type)) {        photoPath = Environment.getExternalStorageDirectory() + "/" + split[1];    }}        }        else if(isDownloadsDocument(uri)) {Uri contentUri = ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"), Long.valueOf(docId));photoPath = getDataColumn(context, contentUri, null, null);        }        else if(isMediaDocument(uri)) {String[] split = docId.split(":");if(split.length >= 2) {    String type = split[0];    Uri contentUris = null;    if("image".equals(type)) {        contentUris = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;    }    else if("video".equals(type)) {        contentUris = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;    }    else if("audio".equals(type)) {        contentUris = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;    }    String selection = MediaStore.Images.Media._ID + "=?";    String[] selectionArgs = new String[] { split[1] };    photoPath = getDataColumn(context, contentUris, selection, selectionArgs);}        }    }    else if("file".equalsIgnoreCase(uri.getScheme())) {        photoPath = uri.getPath();    }    else {        photoPath = getDataColumn(context, uri, null, null);    }    return photoPath;}private static boolean isExternalStorageDocument(Uri uri) {    return "com.android.externalstorage.documents".equals(uri.getAuthority());}private static boolean isDownloadsDocument(Uri uri) {    return "com.android.providers.downloads.documents".equals(uri.getAuthority());}private static boolean isMediaDocument(Uri uri) {    return "com.android.providers.media.documents".equals(uri.getAuthority());}private static String getDataColumn(Context context, Uri uri, String selection, String[] selectionArgs) {    Cursor cursor = null;    String column = MediaStore.Images.Media.DATA;    String[] projection = { column };    try {        cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, null);        if (cursor != null && cursor.moveToFirst()) {int index = cursor.getColumnIndexOrThrow(column);return cursor.getString(index);        }    } finally {        if (cursor != null && !cursor.isClosed())    cursor.close();    }    return null;}

热点阅读

网友最爱