Advertisement
Guest User

getRealPathFromUri

a guest
Jul 17th, 2018
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.39 KB | None | 0 0
  1. public static String getRealPathFromURI(final Context context, final Uri uri) {
  2.  
  3.  
  4.         // DocumentProvider
  5.         if (DocumentsContract.isDocumentUri(context, uri)) {
  6.             // ExternalStorageProvider
  7.             if (isExternalStorageDocument(uri)) {
  8.                 final String docId = DocumentsContract.getDocumentId(uri);
  9.                 final String[] split = docId.split(":");
  10.                 final String type = split[0];
  11.  
  12.                 if ("primary".equalsIgnoreCase(type)) {
  13.                     return Environment.getExternalStorageDirectory() + "/" + split[1];
  14.                 }
  15.  
  16.                 // TODO handle non-primary volumes
  17.             }
  18.             // DownloadsProvider
  19.             else if (isDownloadsDocument(uri)) {
  20.  
  21.                 final String id = DocumentsContract.getDocumentId(uri);
  22.                 final Uri contentUri = ContentUris.withAppendedId(
  23.                         Uri.parse("content://downloads/public_downloads"), Long.valueOf(id));
  24.  
  25.                 return getDataColumn(context, contentUri, null, null);
  26.             }
  27.             // MediaProvider
  28.             else if (isMediaDocument(uri)) {
  29.                 final String docId = DocumentsContract.getDocumentId(uri);
  30.                 final String[] split = docId.split(":");
  31.                 final String type = split[0];
  32.  
  33.                 Uri contentUri = null;
  34.                 if ("image".equals(type)) {
  35.                     contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
  36.                 } else if ("video".equals(type)) {
  37.                     contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
  38.                 } else if ("audio".equals(type)) {
  39.                     contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
  40.                 }
  41.  
  42.                 final String selection = "_id=?";
  43.                 final String[] selectionArgs = new String[]{
  44.                         split[1]
  45.                 };
  46.  
  47.                 return getDataColumn(context, contentUri, selection, selectionArgs);
  48.             }
  49.         }
  50.         // MediaStore (and general)
  51.         else if ("content".equalsIgnoreCase(uri.getScheme())) {
  52.             return getDataColumn(context, uri, null, null);
  53.         }
  54.         // File
  55.         else if ("file".equalsIgnoreCase(uri.getScheme())) {
  56.             return uri.getPath();
  57.         }
  58.  
  59.         return null;
  60.     }
  61.  
  62.     /**
  63.      * Get the value of the data column for this Uri. This is useful for
  64.      * MediaStore Uris, and other file-based ContentProviders.
  65.      *
  66.      * @param context       The context.
  67.      * @param uri           The Uri to query.
  68.      * @param selection     (Optional) Filter used in the query.
  69.      * @param selectionArgs (Optional) Selection arguments used in the query.
  70.      * @return The value of the _data column, which is typically a file path.
  71.      */
  72.     public static String getDataColumn(Context context, Uri uri, String selection,
  73.                                        String[] selectionArgs) {
  74.  
  75.         Cursor cursor = null;
  76.         final String column = "_data";
  77.         final String[] projection = {
  78.                 column
  79.         };
  80.  
  81.         try {
  82.             cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs,
  83.                     null);
  84.             if (cursor != null && cursor.moveToFirst()) {
  85.                 final int column_index = cursor.getColumnIndexOrThrow(column);
  86.                 return cursor.getString(column_index);
  87.             }
  88.         } finally {
  89.             if (cursor != null)
  90.                 cursor.close();
  91.         }
  92.         return null;
  93.     }
  94.  
  95.  
  96.     /**
  97.      * @param uri The Uri to check.
  98.      * @return Whether the Uri authority is ExternalStorageProvider.
  99.      */
  100.     public static boolean isExternalStorageDocument(Uri uri) {
  101.         return "com.android.externalstorage.documents".equals(uri.getAuthority());
  102.     }
  103.  
  104.     /**
  105.      * @param uri The Uri to check.
  106.      * @return Whether the Uri authority is DownloadsProvider.
  107.      */
  108.     public static boolean isDownloadsDocument(Uri uri) {
  109.         return "com.android.providers.downloads.documents".equals(uri.getAuthority());
  110.     }
  111.  
  112.     /**
  113.      * @param uri The Uri to check.
  114.      * @return Whether the Uri authority is MediaProvider.
  115.      */
  116.     public static boolean isMediaDocument(Uri uri) {
  117.         return "com.android.providers.media.documents".equals(uri.getAuthority());
  118.  
  119.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement