Ответ 1
Если вы хотите использовать ShareActionProvider
для совместного использования изображения на текущей странице, вам не нужно сохранять свой собственный кэш изображений. Но чтобы иметь возможность передавать его другим, изображение должно находиться в общей файловой системе на устройстве.
Было бы лучше, если бы вы использовали библиотеки загрузки изображений с поддержкой пользовательского дискового кэша, например Universal Image Loader
Если вы хотите использовать Picasso (это хорошее решение).
Вам либо нужно сохранить копию изображения при каждой смене страницы, которая не является хорошим вариантом.
Или вы можете предоставить пользовательский сетевой обработчик Picasso и установить для него собственную реализацию кэша. Я бы предложил использовать OkHttp с пользовательским кешированием, в котором хранятся файлы в желаемом формате. Когда вы это делаете, у вас должна быть функция, которая преобразует URL-адреса изображений в путь к файлу на устройстве.
При каждой смене страницы, если у вас есть Fragment
внутри вашего ViewPager
, поместите ShareActionProvider
в свои фрагменты.
Получить ссылку ShareActionProvider
внутри onCreateOptionsMenu
. И затем установите Intent с файлом, который вы получите.
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);
Edit:
Другой вариант, который я бы предпочел, - это вырезать ShareActionProvider
и использовать для этого обычный элемент меню. Проблема с ShareActionProvider
заключается в том, что вы должны сделать общий ресурс Intent
готовым для совместного использования пользователем. Вы должны сделать его готовым, даже если пользователь не поделится им.
Но когда у вас есть обычная кнопка, это намного проще, потому что вы делаете операцию только тогда, когда пользователь нажимает кнопку совместного доступа. В этом случае вы можете просто запросить изображение еще раз с Picasso
с помощью объекта Target
и записать Bitmap
, который вы получили в файл в общей внешней файловой системе, и поделиться им.