Загрузка изображения из галереи не работает дважды

Я выбираю изображение из галереи. Теперь я загружаю его в временный файл и могу показать в ImageView. Все отлично работает

Uri uri = data.getData();

File file = new File(uri+"");

String fileName = file.getName();
String filePath = file.getParent();

Bitmap bitmap = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), uri);

//here come's the code to save the temp-file and so on

В fileName и filePath я сохраняю имя и путь для последующего использования. Потому что, если пользователь хочет сохранить изображение, я хочу сделать его копию.

URI shown in the debugger: content:/media/external/images/media/12345
filePath:  content:/media/external/images/media
fileName:  12345

Если я хочу сохранить изображение, я использую fileName и filePath для создания URI и хочу сделать то же самое, что и выше. Но это не работает. Я получаю FileNotFoundException "нет поставщика контента" из MediaStore. Хм - прежде чем я удалил приложение для нового тестирования, появляется "Нет такого файла или каталога", и я подумал, что исключаю исключение "нет поставщика контента" с разрешением READ_EXTERNAL_STORAGE.

Uri uri = Uri.parse(filePath +"/"+ fileName);
Bitmap bitmap = MediaStore.Images.Media.getBitmap(context.getContentResolver(), uri);

Здесь я вижу и правильный URI в отладчике.

Что случилось?

Я установил разрешения READ_EXTERNAL_STORAGE и WRITE_EXTERNAL_STORAGE в AndroidManifest.

1 ответ

Решение

В fileName и filePath я сохраняю имя и путь для последующего использования

Uri это не файл, и ваш, безусловно, не файл.

Что случилось?

Ваш Uri имеет content схема. Это обслуживается ContentProvider, Вы не указываете, где это Uri исходит из, но я собираюсь догадаться, что это из ACTION_GET_DOCUMENT или что-то подобное. В этом случае, как веб-URL, который требует рабочего сеанса, ваш доступ к контенту, идентифицированному этим Uri это коротко.

Если вы хотите иметь более длительный доступ к контенту, загрузите его в свое приложение так же, как если бы вы загружали контент с веб-адреса.

Другие вопросы по тегам