如何与Volley共享下载和缓存的图像?

时间:2014-04-01 19:48:28

标签: android caching android-volley

在我的应用程序中,我使用Volley及其ImageLoader(使用BitmapLruCache)从服务器下载图像。我想创建一个共享选项,研究一下,发现共享意图只能共享localy存储的图像。第一个问题,这是对的吗?

其次,如果这是对的,我该怎么办?我应该再次下载图像并将其保存到本地存储吗?或者把它放在MediaStore中?或者我可以从缓存中提取图像并共享缓存版本?什么是最佳实践?

欢迎任何建议或代码段。

1 个答案:

答案 0 :(得分:2)

我做了另一个获取图像的请求,并添加了一个ImageListener,它提供了包含位图的ImageContainer。

MyApplication.getImageLoader(activity).get(imageURL, new ImageListener() {

        @Override
        public void onErrorResponse(VolleyError error) {}

        @Override
        public void onResponse(ImageContainer response, boolean isImmediate) {
            Bitmap mBitmap = response.getBitmap();
            ContentValues image = new ContentValues();
                image.put(Media.MIME_TYPE, "image/jpg");
                Uri uri = getContentResolver().insert(Media.EXTERNAL_CONTENT_URI, image);
                try {
                    OutputStream out = getContentResolver().openOutputStream(uri);
                    boolean success = mBitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
                    out.close();
                    if (!success) {

                    } else {
                        imageUri = uri;
                        mShareActionProvider = (ShareActionProvider) item.getActionProvider();
                        // Create the share Intent
                        Intent shareIntent = ShareCompat.IntentBuilder.from(activity).setType("image/jpg").setText(shareText).getIntent();
                        shareIntent.putExtra(Intent.EXTRA_STREAM, imageUri);
                        mShareActionProvider.setShareIntent(shareIntent);
                    }

                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });

由于图像已经下载并缓存(使用BitmapLRU缓存和ImageLoader),这个新请求会从缓存中提供位图,因此不会生成新的网络数据。