parent
7ab95428b5
commit
ccd1b728e6
@ -1,135 +0,0 @@ |
||||
package com.frank.ffmpeg.util; |
||||
|
||||
import android.annotation.TargetApi; |
||||
import android.content.ContentUris; |
||||
import android.content.Context; |
||||
import android.database.Cursor; |
||||
import android.net.Uri; |
||||
import android.os.Build; |
||||
import android.os.Environment; |
||||
import android.provider.DocumentsContract; |
||||
import android.provider.MediaStore; |
||||
|
||||
public class ContentUtil { |
||||
|
||||
/** |
||||
* Get a file path from a Uri. This will get the the path for Storage |
||||
* Access Framework Documents. |
||||
* @param context The context |
||||
* @param uri The Uri to query |
||||
*/ |
||||
@TargetApi(Build.VERSION_CODES.KITKAT) |
||||
public static String getPath(final Context context, final Uri uri) { |
||||
|
||||
// DocumentProvider
|
||||
if (DocumentsContract.isDocumentUri(context, uri)) { |
||||
// ExternalStorageProvider
|
||||
if (isExternalStorageDocument(uri)) { |
||||
final String docId = DocumentsContract.getDocumentId(uri); |
||||
final String[] split = docId.split(":"); |
||||
final String type = split[0]; |
||||
|
||||
if ("primary".equalsIgnoreCase(type)) { |
||||
return Environment.getExternalStorageDirectory() + "/" + split[1]; |
||||
} |
||||
} |
||||
// DownloadsProvider
|
||||
else if (isDownloadsDocument(uri)) { |
||||
|
||||
final String id = DocumentsContract.getDocumentId(uri); |
||||
final Uri contentUri = ContentUris.withAppendedId( |
||||
Uri.parse("content://downloads/public_downloads"), Long.valueOf(id)); |
||||
|
||||
return getDataColumn(context, contentUri, null, null); |
||||
} |
||||
// MediaProvider
|
||||
else if (isMediaDocument(uri)) { |
||||
final String docId = DocumentsContract.getDocumentId(uri); |
||||
final String[] split = docId.split(":"); |
||||
final 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; |
||||
} |
||||
|
||||
final String selection = "_id=?"; |
||||
final String[] selectionArgs = new String[] { |
||||
split[1] |
||||
}; |
||||
|
||||
return getDataColumn(context, contentUri, selection, selectionArgs); |
||||
} |
||||
} |
||||
// MediaStore (and general)
|
||||
else if ("content".equalsIgnoreCase(uri.getScheme())) { |
||||
return getDataColumn(context, uri, null, null); |
||||
} |
||||
// File
|
||||
else if ("file".equalsIgnoreCase(uri.getScheme())) { |
||||
return uri.getPath(); |
||||
} |
||||
return null; |
||||
} |
||||
/** |
||||
** |
||||
* Get the value of the data column for this Uri. This is useful for |
||||
* MediaStore Uris, and other file-based ContentProviders. |
||||
* |
||||
* @param context The context |
||||
* @param uri The Uri to query |
||||
* @param selection (Optional) Filter used in the query. |
||||
* @param selectionArgs (Optional) Selection arguments used in the query. |
||||
* @return The value of the _data column, which is typically a file path. |
||||
*/ |
||||
private static String getDataColumn(Context context, Uri uri, String selection, |
||||
String[] selectionArgs) { |
||||
Cursor cursor = null; |
||||
final String column = "_data"; |
||||
final String[] projection = { |
||||
column |
||||
}; |
||||
|
||||
try { |
||||
cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, |
||||
null); |
||||
if (cursor != null && cursor.moveToFirst()) { |
||||
final 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. |
||||
*/ |
||||
private 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. |
||||
*/ |
||||
private 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. |
||||
*/ |
||||
private static boolean isMediaDocument(Uri uri) { |
||||
return "com.android.providers.media.documents".equals(uri.getAuthority()); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,124 @@ |
||||
package com.frank.ffmpeg.util |
||||
|
||||
import android.annotation.TargetApi |
||||
import android.content.ContentUris |
||||
import android.content.Context |
||||
import android.database.Cursor |
||||
import android.net.Uri |
||||
import android.os.Build |
||||
import android.os.Environment |
||||
import android.provider.DocumentsContract |
||||
import android.provider.MediaStore |
||||
|
||||
object ContentUtil { |
||||
|
||||
/** |
||||
* Get a file path from a Uri. This will get the the path for Storage |
||||
* Access Framework Documents. |
||||
* @param context The context |
||||
* @param uri The Uri to query |
||||
*/ |
||||
@TargetApi(Build.VERSION_CODES.KITKAT) |
||||
fun getPath(context: Context, uri: Uri): String? { |
||||
|
||||
// DocumentProvider |
||||
if (DocumentsContract.isDocumentUri(context, uri)) { |
||||
// ExternalStorageProvider |
||||
if (isExternalStorageDocument(uri)) { |
||||
val docId = DocumentsContract.getDocumentId(uri) |
||||
val split = docId.split(":".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray() |
||||
val type = split[0] |
||||
|
||||
if ("primary".equals(type, ignoreCase = true)) { |
||||
return Environment.getExternalStorageDirectory().toString() + "/" + split[1] |
||||
} |
||||
} else if (isDownloadsDocument(uri)) { |
||||
|
||||
val id = DocumentsContract.getDocumentId(uri) |
||||
val contentUri = ContentUris.withAppendedId( |
||||
Uri.parse("content://downloads/public_downloads"), java.lang.Long.valueOf(id)) |
||||
|
||||
return getDataColumn(context, contentUri, null, null) |
||||
} else if (isMediaDocument(uri)) { |
||||
val docId = DocumentsContract.getDocumentId(uri) |
||||
val split = docId.split(":".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray() |
||||
val type = split[0] |
||||
|
||||
var contentUri: Uri? = null |
||||
if ("image" == type) { |
||||
contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI |
||||
} else if ("video" == type) { |
||||
contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI |
||||
} else if ("audio" == type) { |
||||
contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI |
||||
} |
||||
|
||||
val selection = "_id=?" |
||||
val selectionArgs = arrayOf(split[1]) |
||||
|
||||
return getDataColumn(context, contentUri, selection, selectionArgs) |
||||
}// MediaProvider |
||||
// DownloadsProvider |
||||
} else if ("content".equals(uri.scheme!!, ignoreCase = true)) { |
||||
return getDataColumn(context, uri, null, null) |
||||
} else if ("file".equals(uri.scheme!!, ignoreCase = true)) { |
||||
return uri.path |
||||
}// File |
||||
// MediaStore (and general) |
||||
return null |
||||
} |
||||
|
||||
/** |
||||
* |
||||
* Get the value of the data column for this Uri. This is useful for |
||||
* MediaStore Uris, and other file-based ContentProviders. |
||||
* |
||||
* @param context The context |
||||
* @param uri The Uri to query |
||||
* @param selection (Optional) Filter used in the query. |
||||
* @param selectionArgs (Optional) Selection arguments used in the query. |
||||
* @return The value of the _data column, which is typically a file path. |
||||
*/ |
||||
private fun getDataColumn(context: Context, uri: Uri?, selection: String?, |
||||
selectionArgs: Array<String>?): String? { |
||||
var cursor: Cursor? = null |
||||
val column = "_data" |
||||
val projection = arrayOf(column) |
||||
|
||||
try { |
||||
cursor = context.contentResolver.query(uri!!, projection, selection, selectionArgs, null) |
||||
if (cursor != null && cursor.moveToFirst()) { |
||||
val index = cursor.getColumnIndexOrThrow(column) |
||||
return cursor.getString(index) |
||||
} |
||||
} finally { |
||||
cursor?.close() |
||||
} |
||||
return null |
||||
} |
||||
|
||||
/** |
||||
* @param uri The Uri to check. |
||||
* @return Whether the Uri authority is ExternalStorageProvider. |
||||
*/ |
||||
private fun isExternalStorageDocument(uri: Uri): Boolean { |
||||
return "com.android.externalstorage.documents" == uri.authority |
||||
} |
||||
|
||||
/** |
||||
* @param uri The Uri to check. |
||||
* @return Whether the Uri authority is DownloadsProvider. |
||||
*/ |
||||
private fun isDownloadsDocument(uri: Uri): Boolean { |
||||
return "com.android.providers.downloads.documents" == uri.authority |
||||
} |
||||
|
||||
/** |
||||
* @param uri The Uri to check. |
||||
* @return Whether the Uri authority is MediaProvider. |
||||
*/ |
||||
private fun isMediaDocument(uri: Uri): Boolean { |
||||
return "com.android.providers.media.documents" == uri.authority |
||||
} |
||||
|
||||
} |
Loading…
Reference in new issue