здесь я получаю от URI на onActivityResult()
Uri selectedImageURI = data.getData();
String realPath = getRealPathFromURI(selectedImageURI);
1) В фрагменте вы можете использовать такую функцию.
private String getRealPathFromURI(Uri contentURI) {
String filePath;
Cursor cursor = getActivity().getContentResolver().query(contentURI, null, null, null, null);
if (cursor == null) {
filePath = contentURI.getPath();
} else {
cursor.moveToFirst();
int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
filePath = cursor.getString(idx);
cursor.close();
}
return filePath;
}
2) И вы можете использовать такую функцию.
private String getRealPathFromURI(Uri contentURI) {
String filePath;
Cursor cursor = getContentResolver().query(contentURI, null, null, null, null);
if (cursor == null) {
filePath = contentURI.getPath();
} else {
cursor.moveToFirst();
int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
filePath = cursor.getString(idx);
cursor.close();
}
return filePath;
}
Как это работает во всех версиях Android, когда 'DocumentsContract' сам доступен только с API-уровня 19 KitKat? https://developer.android.com/reference/android/provider/DocumentsContract.html –
Используйте этот код, после чего вы узнаете, что он работает на всех устройствах, и есть условия в соответствии с уровнями api. –
должен был упомянуть исходный ответ: http://stackoverflow.com/a/27271131/1567541 –