2015-04-14 5 views
6

i spand wenige Stunden, um diese Lösung zu finden ...Teilen Bild mit ShareActionProvider von Picasso

so habe ich beschlossen, diese informatiom zu teilen, vielleicht etwas ein itwill hilfreich :)

Die erste Weg, gezeigt Im Folgenden wird das Bitmap aus der Ansicht übernommen und in eine Datei geladen.

// Get access to ImageView 
ImageView ivImage = (ImageView) findViewById(R.id.ivResult); 
// Fire async request to load image 
Picasso.with(context).load(imageUrl).into(ivImage); 

und dann unter der Annahme, später, nachdem das Bild vollständig geladen ist, ist dies, wie Sie einen Anteil auslösen können:

// 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; 
} 

Stellen Sie sicher, die entsprechenden Berechtigungen AndroidManifest.xml hinzuzufügen:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
+0

Stack Overflow ist für die Programmierung ** Fragen **. Das ist keine Frage. Wenn Sie Ihre eigene Frage beantworten möchten, ist das in Ordnung, aber bitte ** eine Frage stellen **. In der [Site-Dokumentation] (https://stackoverflow.com/help/self-answer) geht es mehr darum, Ihre eigenen Fragen zu beantworten. – CommonsWare

+0

Es tut mir leid .. Ich habe diese Frage vor ein paar Stunden und ich kann nicht finden die Antwort auf Stackowerflow, so beschlossen, es zu beheben –

+0

Mein Freund nutzt dies, aber es teilte die falsche Bild-ID, hatten Sie dieses Problem? Es ist eine Firebaserecyclerview, mit Picasso –

Antwort

4

Die zweite Möglichkeit, ein Bild zu teilen, erfordert nicht, dass Sie das Bild in eine Datei schreiben. Dieser Code kann auf dem UI-Thread sicher ausgeführt werden. Der Ansatz wurde auf dieser Webseite http://www.nurne.com/2012/07/android-how-to-attach-image-file-from.html vorgeschlagen.

ImageView siv = (ImageView) findViewById(R.id.ivResult); 
Drawable mDrawable = siv.getDrawable(); 
Bitmap mBitmap = ((BitmapDrawable)mDrawable).getBitmap(); 

String path = Images.Media.insertImage(getContentResolver(), 
    mBitmap, "Image Description", null); 

Uri uri = Uri.parse(path); 
return uri; 

Sie erhalten das Zeichen aus dem ImageView. Sie erhalten die Bitmap aus dem Drawable. Legen Sie diese Bitmap in den Media-Bildspeicher. Das gibt Ihnen einen Pfad, der anstelle eines Dateipfads oder einer URL verwandt werden kann. Beachten Sie, dass die ursprüngliche Webseite ein zusätzliches Problem mit unveränderlichen Bitmaps hatte, das dadurch gelöst wurde, dass das Bitmap in eine Leinwand gezeichnet wurde (nie auf dem Bildschirm). Siehe die verlinkte Seite oben für Details.

+0

Ich kann kein Bild mit dieser Methode teilen. Ich erhalte die Aufforderung "Keine App kann diese Aktion ausführen" jedes Mal. – santafebound