安卓選取視頻獲得視頻地址路徑

  1. public class UriUtils {
  2. /**
  3. * Get a file path from a Uri. This will get the the path for Storage Access
  4. * Framework Documents, as well as the _data field for the MediaStore and
  5. * other file-based ContentProviders.
  6. *
  7. * @param context The context.
  8. * @param uri The Uri to query.
  9. */
  10. public static String getPath(final Context context, final Uri uri) {
  11. final boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;
  12. // DocumentProvider
  13. if (isKitKat && DocumentsContract.isDocumentUri(context, uri)) {
  14. // ExternalStorageProvider
  15. if (isExternalStorageDocument(uri)) {
  16. final String docId = DocumentsContract.getDocumentId(uri);
  17. final String[] split = docId.split(":");
  18. final String type = split[0];
  19. if ("primary".equalsIgnoreCase(type)) {
  20. return Environment.getExternalStorageDirectory() + "/" + split[1];
  21. }
  22. // TODO handle non-primary volumes
  23. }
  24. // DownloadsProvider
  25. else if (isDownloadsDocument(uri)) {
  26. final String id = DocumentsContract.getDocumentId(uri);
  27. final Uri contentUri = ContentUris.withAppendedId(
  28. Uri.parse("content://downloads/public_downloads"), Long.valueOf(id));
  29. return getDataColumn(context, contentUri, null, null);
  30. }
  31. // MediaProvider
  32. else if (isMediaDocument(uri)) {
  33. final String docId = DocumentsContract.getDocumentId(uri);
  34. final String[] split = docId.split(":");
  35. final String type = split[0];
  36. Uri contentUri = null;
  37. if ("image".equals(type)) {
  38. contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
  39. } else if ("video".equals(type)) {
  40. contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
  41. } else if ("audio".equals(type)) {
  42. contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
  43. }
  44. final String selection = "_id=?";
  45. final String[] selectionArgs = new String[] {
  46. split[1]
  47. };
  48. return getDataColumn(context, contentUri, selection, selectionArgs);
  49. }
  50. }
  51. // MediaStore (and general)
  52. else if ("content".equalsIgnoreCase(uri.getScheme())) {
  53. return getDataColumn(context, uri, null, null);
  54. }
  55. // File
  56. else if ("file".equalsIgnoreCase(uri.getScheme())) {
  57. return uri.getPath();
  58. }
  59. return null;
  60. }
  61. /**
  62. * Get the value of the data column for this Uri. This is useful for
  63. * MediaStore Uris, and other file-based ContentProviders.
  64. *
  65. * @param context The context.
  66. * @param uri The Uri to query.
  67. * @param selection (Optional) Filter used in the query.
  68. * @param selectionArgs (Optional) Selection arguments used in the query.
  69. * @return The value of the _data column, which is typically a file path.
  70. */
  71. public static String getDataColumn(Context context, Uri uri, String selection,
  72. String[] selectionArgs) {
  73. Cursor cursor = null;
  74. final String column = "_data";
  75. final String[] projection = {
  76. column
  77. };
  78. try {
  79. cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs,
  80. null);
  81. if (cursor != null && cursor.moveToFirst()) {
  82. final int column_index = cursor.getColumnIndexOrThrow(column);
  83. return cursor.getString(column_index);
  84. }
  85. } finally {
  86. if (cursor != null)
  87. cursor.close();
  88. }
  89. return null;
  90. }
  91. /**
  92. * @param uri The Uri to check.
  93. * @return Whether the Uri authority is ExternalStorageProvider.
  94. */
  95. public static boolean isExternalStorageDocument(Uri uri) {
  96. return "com.android.externalstorage.documents".equals(uri.getAuthority());
  97. }
  98. /**
  99. * @param uri The Uri to check.
  100. * @return Whether the Uri authority is DownloadsProvider.
  101. */
  102. public static boolean isDownloadsDocument(Uri uri) {
  103. return "com.android.providers.downloads.documents".equals(uri.getAuthority());
  104. }
  105. /**
  106. * @param uri The Uri to check.
  107. * @return Whether the Uri authority is MediaProvider.
  108. */
  109. public static boolean isMediaDocument(Uri uri) {
  110. return "com.android.providers.media.documents".equals(uri.getAuthority());
  111. }
  112. }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章