2014-04-01 94 views
1

在我的應用程序中,我使用Volley及其ImageLoader(使用BitmapLruCache)從服務器下載圖像。我想創建一個分享選項,稍微研究一下,發現分享目的只能共享本地存儲的圖像。第一個問題,對嗎?如何共享使用Volley下載和緩存的圖像?

二,如果那是對的,我該怎麼辦?我應該再次下載圖像並將其保存到本地存儲?或者把它放在MediaStore中?或者我可以從緩存中提取圖像並共享緩存版本?什麼是最佳實踐?

任何建議,歡迎或代碼片段。

回答

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的),這個新的請求給我從緩存中所以沒有新的網絡數據由位圖。