android – 如何访问Picasso的缓存图像以实现共享意图?

前端之家收集整理的这篇文章主要介绍了android – 如何访问Picasso的缓存图像以实现共享意图?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用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);

保存文件后,用户可以单击共享菜单进行共享.

猜你在找的Android相关文章