Загрузка изображения из галереи не работает дважды
Я выбираю изображение из галереи. Теперь я загружаю его в временный файл и могу показать в 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
это коротко.
Если вы хотите иметь более длительный доступ к контенту, загрузите его в свое приложение так же, как если бы вы загружали контент с веб-адреса.