Android teilen Bild von url

Ich möchte ein Bild mit diesem Code teilen:

Intent sharingIntent = new Intent(Intent.ACTION_SEND); Uri imageUri = Uri.parse("http://stacktoheap.com/images/stackoverflow.png"); sharingIntent.setType("image/png"); sharingIntent.putExtra(Intent.EXTRA_STREAM, imageUri); startActivity(sharingIntent); 

Ich habe eine Taste, die den Code oben aufrufen. Die Aktie Absicht offen, aber ich habe, wenn ich auf "Share by MMS" klicke: "kann dieses Bild nicht zu deiner Nachricht hinzufügen", wenn facebook ich nur einen Textbereich ohne mein Bild bekam.

  • TileOverlays transparent machen
  • Aktivität OnDestroy nie genannt?
  • Was wäre eine Methode zum Erstellen eines Zählers in Android?
  • Rückkehrübergang funktioniert bei der Verwendung von Fragment-gemeinsamen Übergängen nicht richtig
  • Wie bekomme ich BSSID von allen Wifi Access Points?
  • Wie man Stimme in "wav" Format in Android aufnimmt
  • 2 Tage mit dem Versuchen aber ohne Ergebnis 🙁

    Bitte helfen

  • GCMRegistrar.onDestroy (Kontext) Crashing, Empfänger nicht registriert
  • Schwellenbild mit opencv (Java)
  • Navigationsschublade unter Actionbar
  • Wie lösche ich doppelten Tipp auf Button Problem in Android?
  • Content Provider Beispiele ohne SQLite verwenden
  • Ist es sinnvoll, Guice für Android zu benutzen
  • 5 Solutions collect form web for “Android teilen Bild von url”

    Eine angepasste Version von @ eclass's Antwort, die keine Verwendung von ImageView erfordert:

    Benutze Picasso , um die URL in eine Bitmap zu laden

     public void shareItem(String url) { Picasso.with(getApplicationContext()).load(url).into(new Target() { @Override public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) { Intent i = new Intent(Intent.ACTION_SEND); i.setType("image/*"); i.putExtra(Intent.EXTRA_STREAM, getLocalBitmapUri(bitmap)); startActivity(Intent.createChooser(i, "Share Image")); } @Override public void onBitmapFailed(Drawable errorDrawable) { } @Override public void onPrepareLoad(Drawable placeHolderDrawable) { } }); } 

    Konvertieren Sie Bitmap in Uri

     public Uri getLocalBitmapUri(Bitmap bmp) { Uri bmpUri = null; try { File file = new File(getExternalFilesDir(Environment.DIRECTORY_PICTURES), "share_image_" + System.currentTimeMillis() + ".png"); 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; } 

    Ich benutze diese Codes aus diesem Tutorial

      final ImageView imgview= (ImageView)findViewById(R.id.feedImage1); Uri bmpUri = getLocalBitmapUri(imgview); 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 } 

    Dann füge dies zu deiner Aktivität hinzu

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

    Dann füge dein Anwendungsmanifest hinzu

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

    Sie müssen eine lokale Datei verwenden. So was:

      Uri imageUri = Uri.parse("android.resource://your.package/drawable/fileName"); Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("image/png"); intent.putExtra(Intent.EXTRA_STREAM, imageUri); startActivity(Intent.createChooser(intent , "Share")); 

    Wenn Ihr Bild auf dem entfernten Server ist, laden Sie es zuerst zum Gerät herunter.

    Nach viel Nachdenken, hier ist der Code, den ich für mich arbeiten würde! Ich denke, das ist eine der einfachsten Versionen von Code, um die gegebene Aufgabe mit Picasso zu erreichen. Es ist nicht nötig, ein ImageView-Objekt zu erstellen.

      Target target = new Target() { @Override public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) { bmp = bitmap; String path = MediaStore.Images.Media.insertImage(getContentResolver(), bmp, "SomeText", null); Log.d("Path", path); Intent intent = new Intent(Intent.ACTION_SEND); intent.putExtra(Intent.EXTRA_TEXT, "Hey view/download this image"); Uri screenshotUri = Uri.parse(path); intent.putExtra(Intent.EXTRA_STREAM, screenshotUri); intent.setType("image/*"); startActivity(Intent.createChooser(intent, "Share image via...")); } @Override public void onBitmapFailed(Drawable errorDrawable) { } @Override public void onPrepareLoad(Drawable placeHolderDrawable) { } }; String url = "http://efdreams.com/data_images/dreams/face/face-03.jpg"; Picasso.with(getApplicationContext()).load(url).into(target); 

    Hier ist bmp eine Klasse Ebene Bitmap Variable und URL ist die dynamische Internet-URL zu Ihrem Bild für die gemeinsame Nutzung. Auch anstatt den Code in der Funktion onBitmapLoaded () zu teilen, kann er auch in einer anderen Handler-Funktion gehalten und später von der Funktion onBitmapLoaded () aufgerufen werden. Hoffe das hilft!

    Mit Hilfe von createchooser können Sie dies erreichen,

     Intent sharingIntent = new Intent(Intent.ACTION_SEND); Uri screenshotUri = Uri.parse(path); sharingIntent.setType("image/png"); sharingIntent.putExtra(Intent.EXTRA_STREAM, screenshotUri); startActivity(Intent.createChooser(sharingIntent, "Share image using")); 

    Anmeldung für die Absicht

    Wenn Sie möchten, dass Ihre App aufgeführt wird, wenn diese Absicht aufgerufen wird, müssen Sie einen Absichtsfilter in Ihrer Datei manifest.xml hinzufügen

      <intent-filter> <action android:name="android.intent.action.SEND" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="image/*" /> </intent-filter> 
    Das Android ist ein Google Android Fan-Website, Alles über Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.