Skip to content

Instantly share code, notes, and snippets.

@PrashamTrivedi
Last active June 17, 2017 16:04
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save PrashamTrivedi/1df96c2b09f618e3dfc8 to your computer and use it in GitHub Desktop.
Save PrashamTrivedi/1df96c2b09f618e3dfc8 to your computer and use it in GitHub Desktop.
FilePicker Kitkat
package com.zoomimob_faculty.utils;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.os.Environment;
import android.provider.DocumentsContract;
import android.provider.MediaStore;
import android.provider.MediaStore.Audio;
public class KitkatFilesHandler {
private static Uri fileUri;
public static void initWithUri(Uri fileUri) {
KitkatFilesHandler.fileUri = fileUri;
}
public static String getFilePath(Context context) {
if (fileUri == null) {
throw new IllegalStateException(
"You have not initialized KitkatFilesHanlder properly, call initWithUri method to do that");
}
String path = "";
if (isExternalStorageDocument(fileUri)) {
final String docId = DocumentsContract.getDocumentId(fileUri);
final String[] split = docId.split(":");
final String storageType = split[0];
if ("primary".equalsIgnoreCase(storageType)) {
path = Environment.getExternalStorageDirectory() + "/" + split[1];
}
// TODO handle non-primary volumes
}
// DownloadsProvider
else if (isDownloadsDocument(fileUri)) {
final String id = DocumentsContract.getDocumentId(fileUri);
final Uri contentUri = ContentUris.withAppendedId(
Uri.parse("content://downloads/public_downloads"),
Long.valueOf(id));
path = getDataColumn(context, contentUri, null, null);
}
// MediaProvider
else if (isMediaDocument(fileUri)) {
final String docId = DocumentsContract.getDocumentId(fileUri);
final String[] split = docId.split(":");
final String mediaType = split[0];
Uri contentUri = null;
if ("image".equals(mediaType)) {
contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
} else if ("video".equals(mediaType)) {
contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
} else if ("audio".equals(mediaType)) {
contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
}
final String selection = "_id=?";
final String[] selectionArgs = new String[] {
split[1]
};
path = getDataColumn(context, contentUri, selection,
selectionArgs);
}
// MEDIA URIS
else if (isMediaUri(fileUri)) {
path = getDataColumn(context, fileUri, null,
null);
}
return path;
}
public String getRealPathFromURI(ContentResolver contentResolver, Uri contentUri) {
Cursor cursor = null;
try {
String[] proj = {
Audio.Media.DATA
};
cursor = contentResolver.query(contentUri, proj, null, null, null);
int column_index = 0;
if (cursor != null) {
column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
} else {
return null;
}
} finally {
if (cursor != null) {
cursor.close();
}
}
}
/**
* @return True if Uri is a MediaStore Uri.
* @author paulburke
*/
public static boolean isMediaUri(Uri uri) {
return "media".equalsIgnoreCase(uri.getAuthority());
}
/**
* @param uri The Uri to check.
* @return Whether the Uri authority is ExternalStorageProvider.
*/
public 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.
*/
public 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.
*/
public static boolean isMediaDocument(Uri uri) {
return "com.android.providers.media.documents".equals(uri.getAuthority());
}
/**
* 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.
*/
public 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 column_index = cursor.getColumnIndexOrThrow(column);
return cursor.getString(column_index);
}
} finally {
if (cursor != null)
cursor.close();
}
return null;
}
}
@ivanick87
Copy link

Thank you

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment