Я попробовал решение (см. ниже), которое отлично работает, за исключением Android 4.4, вызов startActivityForResult()
вызывает активность под названием "Открыть от", которая имеет "Недавние", "Изображения", "Загрузки", а также как несколько приложений для выбора. Когда я выбираю "Изображения" и пытаюсь разрешить возвращаемый URI содержимого (используя код ниже), вызов cursor.getString()
возвращает значение null. Если я выбираю тот же файл с помощью приложения Gallery, cursor.getString()
возвращает путь к файлу. Я тестировал это только на уровнях API 16 и 19. Все работает так, как ожидалось, в 16 лет. Что касается 19, я должен выбрать галерею или другое приложение, или оно не работает.
private String getRealPathFromURI(Context context, Uri contentUri) {
Cursor cursor = null;
try {
String[] proj = { MediaStore.Images.Media.DATA };
cursor = context.getContentResolver().query(contentUri, proj, null, null, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
String path = cursor.getString(column_index);
return path;
} finally {
if (cursor != null) {
cursor.close();
}
}
}