简体   繁体   中英

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.

  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();
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM