如果你想使用ShareActionProvider
要共享当前页面上的图像,您不必保留自己的图像缓存。但为了能够将其共享给其他人,图像应该位于设备上的共享文件系统中。
如果您使用具有自定义磁盘缓存支持的图像加载库会更好,例如通用图像加载器 https://github.com/nostra13/Android-Universal-Image-Loader
如果你想使用毕加索(这是一个很好的决定)。
您要么必须在每次页面更改时保存图像的副本,这也不是一个好的选择。
或者您可以为 Picasso 提供自定义网络处理程序并为其设置自定义缓存实现。我建议使用带有自定义缓存的 OkHttp,它以您想要的格式存储文件。当您这样做时,您必须有一个将图像 URL 转换为设备上的文件路径的函数。
在每次页面更改时,如果您有Fragment
在你的里面ViewPager
, 放在ShareActionProvider
进入你的片段。
获取参考ShareActionProvider
inside 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
with a Target
对象并写出Bitmap
您找到共享外部文件系统中的一个文件并共享它。