领透酷医云安卓客户端

ContentUriUtil.java 5.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. package com.linkdialy.mobile.kuyicloud.utils;
  2. import android.content.ContentUris;
  3. import android.content.Context;
  4. import android.database.Cursor;
  5. import android.net.Uri;
  6. import android.os.Build;
  7. import android.os.Environment;
  8. import android.provider.DocumentsContract;
  9. import android.provider.MediaStore;
  10. import android.support.annotation.RequiresApi;
  11. public class ContentUriUtil {
  12. /**
  13. * Get a file path from a Uri. This will get the the path for Storage Access
  14. * Framework Documents, as well as the _data field for the MediaStore and
  15. * other file-based ContentProviders.
  16. *
  17. * @param context The context.
  18. * @param uri The Uri to query.
  19. * @author paulburke
  20. */
  21. @RequiresApi(api = Build.VERSION_CODES.KITKAT)
  22. public static String getPath(final Context context, final Uri uri) {
  23. // DocumentProvider
  24. if (DocumentsContract.isDocumentUri(context, uri)) {
  25. // ExternalStorageProvider
  26. if (isExternalStorageDocument(uri)) {
  27. final String docId = DocumentsContract.getDocumentId(uri);
  28. final String[] split = docId.split(":");
  29. final String type = split[0];
  30. if ("primary".equalsIgnoreCase(type)) {
  31. return Environment.getExternalStorageDirectory() + "/" + split[1];
  32. }
  33. // TODO handle non-primary volumes
  34. }
  35. // DownloadsProvider
  36. else if (isDownloadsDocument(uri)) {
  37. final String id = DocumentsContract.getDocumentId(uri);
  38. final Uri contentUri = ContentUris.withAppendedId(
  39. Uri.parse("content://downloads/public_downloads"), Long.valueOf(id));
  40. return getDataColumn(context, contentUri, null, null);
  41. }
  42. // MediaProvider
  43. else if (isMediaDocument(uri)) {
  44. final String docId = DocumentsContract.getDocumentId(uri);
  45. final String[] split = docId.split(":");
  46. final String type = split[0];
  47. Uri contentUri = null;
  48. if ("image".equals(type)) {
  49. contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
  50. } else if ("video".equals(type)) {
  51. contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
  52. } else if ("audio".equals(type)) {
  53. contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
  54. }
  55. final String selection = "_id=?";
  56. final String[] selectionArgs = new String[] {
  57. split[1]
  58. };
  59. return getDataColumn(context, contentUri, selection, selectionArgs);
  60. }
  61. }
  62. // MediaStore (and general)
  63. else if ("content".equalsIgnoreCase(uri.getScheme())) {
  64. // Return the remote address
  65. if (isGooglePhotosUri(uri))
  66. return uri.getLastPathSegment();
  67. return getDataColumn(context, uri, null, null);
  68. }
  69. // File
  70. else if ("file".equalsIgnoreCase(uri.getScheme())) {
  71. return uri.getPath();
  72. }
  73. return null;
  74. }
  75. /**
  76. **
  77. * Get the value of the data column for this Uri. This is useful for
  78. * MediaStore Uris, and other file-based ContentProviders.
  79. *
  80. * @param context The context.
  81. * @param uri The Uri to query.
  82. * @param selection (Optional) Filter used in the query.
  83. * @param selectionArgs (Optional) Selection arguments used in the query.
  84. * @return The value of the _data column, which is typically a file path.
  85. */
  86. public static String getDataColumn(Context context, Uri uri, String selection,
  87. String[] selectionArgs) {
  88. Cursor cursor = null;
  89. final String column = "_data";
  90. final String[] projection = {
  91. column
  92. };
  93. try {
  94. cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs,
  95. null);
  96. if (cursor != null && cursor.moveToFirst()) {
  97. final int index = cursor.getColumnIndexOrThrow(column);
  98. return cursor.getString(index);
  99. }
  100. } finally {
  101. if (cursor != null)
  102. cursor.close();
  103. }
  104. return null;
  105. }
  106. /**
  107. * @param uri The Uri to check.
  108. * @return Whether the Uri authority is ExternalStorageProvider.
  109. */
  110. public static boolean isExternalStorageDocument(Uri uri) {
  111. return "com.android.externalstorage.documents".equals(uri.getAuthority());
  112. }
  113. /**
  114. * @param uri The Uri to check.
  115. * @return Whether the Uri authority is DownloadsProvider.
  116. */
  117. public static boolean isDownloadsDocument(Uri uri) {
  118. return "com.android.providers.downloads.documents".equals(uri.getAuthority());
  119. }
  120. /**
  121. * @param uri The Uri to check.
  122. * @return Whether the Uri authority is MediaProvider.
  123. */
  124. public static boolean isMediaDocument(Uri uri) {
  125. return "com.android.providers.media.documents".equals(uri.getAuthority());
  126. }
  127. /**
  128. * @param uri The Uri to check.
  129. * @return Whether the Uri authority is Google Photos.
  130. */
  131. public static boolean isGooglePhotosUri(Uri uri) {
  132. return "com.google.android.apps.photos.content".equals(uri.getAuthority());
  133. }
  134. }