Milan837
Milan837

Reputation: 81

How to get real path of capture image and gallery image in android in android 10 and above

for getting the real path of capture image and gallery image the following code work perfectly fine for me.

private String getRealPathFromURI(Uri contentUri) {
        String result = null;
        try{
            String[] proj = { MediaStore.Images.Media.DATA };
            CursorLoader loader = new CursorLoader(requireActivity(), contentUri, proj, null, null, null);
            Cursor cursor = loader.loadInBackground();
            int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
            cursor.moveToFirst();
            result = cursor.getString(column_index);
            cursor.close();
        }catch(Exception e){
            Log.i("error_getting_path",e.getMessage());
        }

        return result;
    }

but in android 10 and above device i am not able to get the path of capture and gallery image . so my app is not working in android 10 and above for this feature. please suggest the best way to get path in all android devices.

Upvotes: 0

Views: 1631

Answers (1)

Sunil Chaudhary
Sunil Chaudhary

Reputation: 1247

  private static String getRealPathFromURI(Uri uri) {
    Uri returnUri = uri;
    Cursor returnCursor = getContentResolver().query(returnUri, null, null, null, null);
    int nameIndex = returnCursor.getColumnIndex( OpenableColumns.DISPLAY_NAME);

    returnCursor.moveToFirst();
    String name = (returnCursor.getString(nameIndex));

    File file = new File(context.getFilesDir(), name);
    try {
        InputStream inputStream = context.getContentResolver().openInputStream(uri);
        FileOutputStream outputStream = new FileOutputStream(file);
        int read = 0;
        int maxBufferSize = 1 * 1024 * 1024;
        int bytesAvailable = inputStream.available();

      
        int bufferSize = Math.min(bytesAvailable, maxBufferSize);

        final byte[] buffers = new byte[bufferSize];
        while ((read = inputStream.read(buffers)) != -1) {
            outputStream.write(buffers, 0, read);
        }
      
        inputStream.close();
        outputStream.close();
        Log.e("File Path", "Path " + file.getAbsolutePath());

    } catch (Exception e) {
        Log.e("Exception", e.getMessage());
    }
    return file.getAbsolutePath();
}

Upvotes: 1

Related Questions