根据Uri获取图片绝对路径,解决Android4.4以上版本Uri转换

  1. /** 
     * 根据Uri获取图片绝对路径,解决Android4.4以上版本Uri转换 
     * @param activity 
     * @param imageUri 
     * @author yaoxing 
     * @date 2014-10-12 
     */  
    @TargetApi(19)  
    public static String getImageAbsolutePath(Activity context, Uri imageUri) {  
        if (context == null || imageUri == null)  
            return null;  
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT && DocumentsContract.isDocumentUri(context, imageUri)) {  
            if (isExternalStorageDocument(imageUri)) {  
                String docId = DocumentsContract.getDocumentId(imageUri);  
                String[] split = docId.split(":");  
                String type = split[0];  
                if ("primary".equalsIgnoreCase(type)) {  
                    return Environment.getExternalStorageDirectory() + "/" + split[1];  
                }  
            } else if (isDownloadsDocument(imageUri)) {  
                String id = DocumentsContract.getDocumentId(imageUri);  
                Uri contentUri = ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"), Long.valueOf(id));  
                return getDataColumn(context, contentUri, null, null);  
            } else if (isMediaDocument(imageUri)) {  
                String docId = DocumentsContract.getDocumentId(imageUri);  
                String[] split = docId.split(":");  
                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;  
                }  
                String selection = MediaStore.Images.Media._ID + "=?";  
                String[] selectionArgs = new String[] { split[1] };  
                return getDataColumn(context, contentUri, selection, selectionArgs);  
            }  
        } // MediaStore (and general)  
        else if ("content".equalsIgnoreCase(imageUri.getScheme())) {  
            // Return the remote address  
            if (isGooglePhotosUri(imageUri))  
                return imageUri.getLastPathSegment();  
            return getDataColumn(context, imageUri, null, null);  
        }  
        // File  
        else if ("file".equalsIgnoreCase(imageUri.getScheme())) {  
            return imageUri.getPath();  
        }  
        return null;  
    }  
      
    public 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.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());  
    }  
      
    /** 
     * @param uri The Uri to check. 
     * @return Whether the Uri authority is Google Photos. 
     */  
    public static boolean isGooglePhotosUri(Uri uri) {  
        return "com.googl


  2. 转自https://blog.csdn.net/q445697127/article/details/40537945
  3. 已测试 6.0 和 7.0 从相册选择图片

猜你喜欢

转载自blog.csdn.net/ywjun0919/article/details/80541600
今日推荐