Guest User

Untitled

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