title: Share image with ShareActionProvider from Picasso
body: <p>i spand few hours to find this solution...</p>
  
  <p>so i decided to share this informatiom, maybe some one itwill helpful :)</p>
  
  <p>The <strong>first way</strong>, shown below, takes the bitmap from the view and loads it into a file.</p>
  
  <pre><code>// Get access to ImageView 
  ImageView ivImage = (ImageView) findViewById(R.id.ivResult);
  // Fire async request to load image
  Picasso.with(context).load(imageUrl).into(ivImage);
  </code></pre>
  
  <p>and then later assuming after the image has completed loading, this is how you can trigger a share:</p>
  
  <pre><code>// Can be triggered by a view event such as a button press
  public void onShareItem(View v) {
      // Get access to bitmap image from view
      ImageView ivImage = (ImageView) findViewById(R.id.ivResult);
      // Get access to the URI for the bitmap
      Uri bmpUri = getLocalBitmapUri(ivImage);
      if (bmpUri != null) {
          // Construct a ShareIntent with link to image
          Intent shareIntent = new Intent();
          shareIntent.setAction(Intent.ACTION_SEND);
          shareIntent.putExtra(Intent.EXTRA_STREAM, bmpUri);
          shareIntent.setType("image/*");
          // Launch sharing dialog for image
          startActivity(Intent.createChooser(shareIntent, "Share Image"));    
      } else {
          // ...sharing failed, handle error
      }
  }
  
  // Returns the URI path to the Bitmap displayed in specified ImageView
  public Uri getLocalBitmapUri(ImageView imageView) {
      // Extract Bitmap from ImageView drawable
      Drawable drawable = imageView.getDrawable();
      Bitmap bmp = null;
      if (drawable instanceof BitmapDrawable){
         bmp = ((BitmapDrawable) imageView.getDrawable()).getBitmap();
      } else {
         return null;
      }
      // Store image to default external storage directory
      Uri bmpUri = null;
      try {
          File file =  new File(Environment.getExternalStoragePublicDirectory(  
              Environment.DIRECTORY_DOWNLOADS), "share_image_" + System.currentTimeMillis() + ".png");
          file.getParentFile().mkdirs();
          FileOutputStream out = new FileOutputStream(file);
          bmp.compress(Bitmap.CompressFormat.PNG, 90, out);
          out.close();
          bmpUri = Uri.fromFile(file);
      } catch (IOException e) {
          e.printStackTrace();
      }
      return bmpUri;
  }
  </code></pre>
  
  <p>Make sure to add the appropriate permissions to your AndroidManifest.xml:</p>
  
  <pre><code>&lt;uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/&gt;
  &lt;uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /&gt;
  </code></pre>