Skip to content

Instantly share code, notes, and snippets.

@iammert
Created November 10, 2016 08:13
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save iammert/92ac734df10fb6c12a2b81a162660eca to your computer and use it in GitHub Desktop.
Save iammert/92ac734df10fb6c12a2b81a162660eca to your computer and use it in GitHub Desktop.
public class FileUtil {
public static File getPickedPictureFile(Context context, Uri selectedImage) {
final boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;
// DocumentProvider
if (isKitKat && DocumentsContract.isDocumentUri(context, selectedImage)) {
// ExternalStorageProvider
if (isExternalStorageDocument(selectedImage)) {
final String docId = DocumentsContract.getDocumentId(selectedImage);
final String[] split = docId.split(":");
final String type = split[0];
if ("primary".equalsIgnoreCase(type)) {
return new File(Environment.getExternalStorageDirectory() + "/" + split[1]);
}
// TODO handle non-primary volumes
}
// DownloadsProvider
else if (isDownloadsDocument(selectedImage)) {
final String id = DocumentsContract.getDocumentId(selectedImage);
final Uri contentUri = ContentUris.withAppendedId(
Uri.parse("content://downloads/public_downloads"), Long.valueOf(id));
return new File(getDataColumn(context, contentUri, null, null));
}
// MediaProvider
else if (isMediaDocument(selectedImage)) {
final String docId = DocumentsContract.getDocumentId(selectedImage);
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 new File(getDataColumn(context, contentUri, selection, selectionArgs));
}
}
// MediaStore (and general)
else if ("content".equalsIgnoreCase(selectedImage.getScheme())) {
return new File(getDataColumn(context, selectedImage, null, null));
}
// File
else if ("file".equalsIgnoreCase(selectedImage.getScheme())) {
return new File(selectedImage.getPath());
}
return null;
}
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 column_index = cursor.getColumnIndexOrThrow(column);
return cursor.getString(column_index);
}
} finally {
if (cursor != null)
cursor.close();
}
return null;
}
public static boolean isExternalStorageDocument(Uri uri) {
return "com.android.externalstorage.documents".equals(uri.getAuthority());
}
public static boolean isDownloadsDocument(Uri uri) {
return "com.android.providers.downloads.documents".equals(uri.getAuthority());
}
public static boolean isMediaDocument(Uri uri) {
return "com.android.providers.media.documents".equals(uri.getAuthority());
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment