我正在使用Picasso来帮助缓存图像.
问题是,如何访问下载的图像以进行共享意图?
有任何想法吗?谢谢!
解决方法
我希望你能理解我的问题:-)
对不起我的延迟,我找到了一个解决方案,但是,不是一个好的…
首先,我真的搜索了一会儿,看了毕加索的代码.看来你应该提供自己的下载器和其他东西.但是,为什么我要使用lib …
然后,我认为Picasso的设计/架构只是将文件缓存在内部存储中.也许是因为外部存储并不总是可用(例如用户可能将SD卡插入他的计算机),或者可能因为外部存储没有内部存储那么快……这是我的猜测.总之,其他应用无法访问当前应用的内部存储,因此无法完成共享.
因此,我做了一个非常普通的解决方案.我只是等待Picasso给出Bitmap,并将其压缩到外部文件中的文件,然后进行共享.这似乎是一个糟糕的解决方案,但它确实解决了这个问题,是的……
您应该知道外部缓存目录是否可用.如果没有,你就无法分享.并且你需要将压缩任务放在后台线程中,所以,等待缓存的外部文件……它看起来像是一个糟糕的解决方案吗?我认同…
下面是我的项目代码,你可以尝试一下……
private boolean mSaved; // a flag,whether the image is saved in external storage private MenuItem mShare; private Intent mIntent; private ShareActionProvider mShareActionProvider; private File mImage; // the external image file would be saved... private Target target = new Target() { @Override public void onBitmapLoaded(final Bitmap bitmap,Picasso.LoadedFrom from) { new Thread(new Runnable() { @Override public void run() { FileOutputStream os = null; try { String dir = CatnutUtils.mkdir(getActivity(),Constants.FANTASY_DIR); // check the exteral dir avaiable or not... String[] paths = Uri.parse(mUrl).getPath().split("/"); mImage = new File(dir + File.separator + paths[2] + Constants.JPG); // resoleve the file name } catch (Exception e) { // the external storage not available... Log.e(TAG,"create dir error!",e); return; } try { if (mImage.length() > 10) { // > 0 means the file exists // the file exists,done. mIntent.putExtra(Intent.EXTRA_STREAM,Uri.fromFile(mImage)); mSaved = true; return; } os = new FileOutputStream(mImage); bitmap.compress(Bitmap.CompressFormat.JPEG,100,os); mIntent.putExtra(Intent.EXTRA_STREAM,Uri.fromFile(mImage)); mSaved = true; } catch (FileNotFoundException e) { Log.e(TAG,"io error!",e); } finally { if (os != null) { try { os.close(); } catch (IOException e) { Log.e(TAG,"io closing error!",e); } } } } }).start(); mFantasy.setImageBitmap(bitmap); } @Override public void onBitmapFailed(Drawable errorDrawable) { mFantasy.setImageDrawable(errorDrawable); } @Override public void onPrepareLoad(Drawable placeHolderDrawable) { if (placeHolderDrawable != null) { mFantasy.setImageDrawable(placeHolderDrawable); } } }; @Override public void onPrepareOptionsMenu(Menu menu) { mShare.setEnabled(mSaved); } public void onCreateOptionsMenu(Menu menu,MenuInflater inflater) { inflater.inflate(R.menu.fantasy,menu); mShare = menu.findItem(R.id.action_share); mShareActionProvider = (ShareActionProvider) mShare.getActionProvider(); mShare.setActionProvider(mShareActionProvider); mShareActionProvider.setShareIntent(mIntent); }
最后,调用Picasso.with(getActivity()).load(mUrl).into(target);