0

I have been trying to get the actual path and name of image by selecting it from gallery it gives the uri in Uri uri = data.getData();

from here i tried to retrieve its file path. things i tried. 1.

File file = new File(uri.GetPath);

which provides

content://com.android.providers.media.documents/document/image%3A37

which isn,t the actual path it will be something like this.

/sdcard/Download/google-adsense-cheque.jpg

how should i retrieve this above path and its name. I have been using gallery intent to open and select the image.

 public String getImagePath(Uri uri) {
    String selectedImagePath;
    // 1:MEDIA GALLERY --- query from MediaStore.Images.Media.DATA
    String[] projection = { MediaStore.Images.Media.DATA };
    Cursor cursor = managedQuery(uri, projection, null, null, null);
    if (cursor != null) {
        int column_index = cursor
                .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        cursor.moveToFirst();
        selectedImagePath = cursor.getString(column_index);
    } else {
        selectedImagePath = null;
    }

    if (selectedImagePath == null) {
        // 2:OI FILE Manager --- call method: uri.getPath()
        selectedImagePath = uri.getPath();
    }
    return selectedImagePath;
}

public String getPath(Uri uri) {
    String[] projection = { MediaStore.Images.Media.DATA };
    Cursor cursor = getContentResolver().query(uri, projection, null, null, null);
    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    cursor.moveToFirst();
    int columnIndex = cursor.getColumnIndex(projection[0]);
    String filePath = cursor.getString(columnIndex);
    cursor.close();
    Bitmap yourSelectedImage = BitmapFactory.decodeFile(filePath);
    return cursor.getString(column_index);
}

also used this method but column index provides null value.

have also tried this in Activity on result.

 @SuppressLint("NewApi")
public static String getFilePath(Context context, Uri uri) throws URISyntaxException {
String selection = null;
String[] selectionArgs = null;
// Uri is different in versions after KITKAT (Android 4.4), we need to
if (Build.VERSION.SDK_INT >= 19 && DocumentsContract.isDocumentUri(context.getApplicationContext(), uri)) {
    if (isExternalStorageDocument(uri)) {
        final String docId = DocumentsContract.getDocumentId(uri);
        final String[] split = docId.split(":");
        return Environment.getExternalStorageDirectory() + "/" + split[1];
    } else if (isDownloadsDocument(uri)) {
        final String id = DocumentsContract.getDocumentId(uri);
        uri = ContentUris.withAppendedId(
                Uri.parse("content://downloads/public_downloads"), Long.valueOf(id));
    } else if (isMediaDocument(uri)) {
        final String docId = DocumentsContract.getDocumentId(uri);
        final String[] split = docId.split(":");
        final String type = split[0];
        if ("image".equals(type)) {
            uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
        } else if ("video".equals(type)) {
            uri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
        } else if ("audio".equals(type)) {
            uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
        }
        selection = "_id=?";
        selectionArgs = new String[]{
                split[1]
        };
    }
}
if ("content".equalsIgnoreCase(uri.getScheme())) {
    String[] projection = {
            MediaStore.Images.Media.DATA
    };
    Cursor cursor = null;
    try {
        cursor = context.getContentResolver()
                .query(uri, projection, selection, selectionArgs, null);
        int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        if (cursor.moveToFirst()) {
            return cursor.getString(column_index);
        }
    } catch (Exception e) {
    }
} else if ("file".equalsIgnoreCase(uri.getScheme())) {
    return uri.getPath();
}
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());
}

these were the links i looked but not getting the path.

Get filename and path from URI from mediastore

this is the for Gallery intent i used

Intent intent = new Intent();
                intent.setType("image/*");
 intent.setAction(Intent.ACTION_GET_CONTENT);
            startActivityForResult(Intent.createChooser(intent,"Select Picture"), RESULT_LOAD_IMAGE);

can any one help im using this file path and file name i.e "check.jpeg"... to be sent to the server in

 MultipartBody.Part body= MultipartBody.Part.createFormData("upload", file.getName(), reqFile);
arsalan
  • 25
  • 1
  • 9
  • See also https://stackoverflow.com/q/48510584/115145 and https://stackoverflow.com/q/35870825/115145 – CommonsWare Jul 27 '18 at 10:54
  • Yes it was not clear, because many questions were leading to same techniques which will never provide the file path in first place,the above links were helpful. – arsalan Jul 27 '18 at 11:07

0 Answers0