Получить изображение uri из picasso?

У меня есть довольно большой список URL-адресов изображений, которые я использую для загрузки ViewPager с использованием Picasso. Мне нужно предоставить возможности совместного использования этих изображений с помощью намерения (в конечном счете, с помощью ShareActionProvider ). Из того, что я читал, Пикассо на самом деле не построен, чтобы обрабатывать подобные вещи из коробки, хотя он предоставляет все необходимые инструменты для этого.

Мой план перед исследованием заключался в создании простого LruCache который использует url как ключевое и битовое значение. Это кэширование будет происходить в onBitmapLoaded через интерфейс Target Picasso. Всякий раз, когда я хочу поделиться изображением, я проверю кеш для растрового изображения. Если его там нет, я приеду с Пикассо. Теперь, когда у меня есть кэшированное растровое изображение, независимо от того, я напишу в файл (… эта часть кажется неправильной, хотя мне нужно написать файл, чтобы получить uri, не так ли?) И добавить файл uri в Цель.

Однако я вижу, что с Picasso.Builder я могу установить (и сохранить ссылку) свой собственный кеш – https://stackoverflow.com/a/18552559/413254 . Это означает, что я могу избавиться от пользовательской Target и путаницы с правильной реализацией hashCode и equals методами для обеспечения точной переработки, поиска и т. Д.

Мой вопрос: как Пикассо использует этот кеш? Какие ключи? Есть ли способ получить растровое изображение Uri, не записывая его на диск?

Solutions Collecting From Web of "Получить изображение uri из picasso?"

Если вы хотите использовать ShareActionProvider для совместного использования изображения на текущей странице, вам не нужно сохранять свой собственный кеш изображений. Но чтобы иметь возможность передавать его другим, изображение должно находиться в общей файловой системе на устройстве.

Было бы лучше, если бы вы использовали библиотеки загрузки изображений с поддержкой пользовательского дискового кеша, например Universal Image Loader

Если вы хотите использовать Picasso (это хорошее решение).

Вы либо должны сохранить копию изображения при каждой смене страницы, которая не является хорошим вариантом.

Или вы можете предоставить пользовательский сетевой обработчик Picasso и установить для него собственную реализацию кэша. Я бы предложил использовать OkHttp с пользовательским кешированием, в котором хранятся файлы в желаемом формате. Когда вы это делаете, у вас должна быть функция, которая преобразует URL-адреса изображений в путь к файлу на устройстве.

При каждой смене страницы, если у вас есть Fragment внутри вашего ViewPager , поместите ShareActionProvider в свои фрагменты.

Получите ссылку на ShareActionProvider внутри onCreateOptionsMenu . И затем установите намерение с файлом, который вы получите.

 Intent shareIntent = new Intent(Intent.ACTION_SEND); Uri phototUri = Uri.parse(Utils.getFilePath(imageUrl)); shareIntent.setData(phototUri); shareIntent.setType("image/png"); shareIntent.putExtra(Intent.EXTRA_STREAM, phototUri); mShareActionProvider.setShareIntent(intent); 

Изменить: другой вариант, который я бы предпочел, – это ShareActionProvider и использовать для этого обычный элемент меню. Проблема с ShareActionProvider заключается в том, что вы должны сделать ShareActionProvider Intent для пользователя ShareActionProvider для совместного использования. Вы должны сделать его готовым, даже если пользователь не поделится им.

Но когда у вас есть обычная кнопка, это намного проще, потому что вы делаете операцию только тогда, когда пользователь нажимает кнопку совместного доступа. В этом случае вы можете просто запросить изображение еще раз из Picasso с Target объектом и записать Bitmap вы получили в файл в общей внешней файловой системе, и поделиться им.