質問

In my app I download images from server using Volley and its ImageLoader (with BitmapLruCache). I want to create a share option, researched a little bit, and found that share intent can only share localy stored images. First question, is this right?

Second, if that is right, what should I do? Should I download image again and save it to local storage? Or put it in MediaStore? Or I can pull image from cache and share cached version? What are the best practices?

Any suggestion is welcome, or code snippet.

役に立ちましたか?

解決

What I did is made another request for getting the image, and added an ImageListener which provides ImageContainer containing bitmap.

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();
                }
            }
        });

As image is already downloaded and cached (using BitmapLRU cache and ImageLoader), this new request gives me bitmap from cache so no new network data is made.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top