2016-04-08 4 views
0

Ich versuche, mehrere Bilder zu einer E-Mail-Absicht hinzuzufügen. Dies ist der Code, den ich benutzt habe.Bilder, die nicht an E-Mail angehängt sind

final ArrayList<Uri> uris = new ArrayList<>(); 

    for (int i = 0; i < form.getImageContainers().size(); i++) 
     uris.add(Uri.fromFile(new File(form.getImageContainers().get(i).getImagePath()))); 

    final Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.parse("mailto:")) 
      .putExtra(Intent.EXTRA_EMAIL, "[email protected]") 
      .putExtra(Intent.EXTRA_SUBJECT, "Sample Submission (Beta Test)") 
      .putExtra(Intent.EXTRA_TEXT, Html.fromHtml(buildBody())); 
      .putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris); 

    startActivity(Intent.createChooser(emailIntent, "Send email...")); 

Aber es hängt nichts an, nur der Text des Körpers und alles andere geht.

Ich habe versucht, ein einzelnes Bild erhalten, indem die .putParcelableArrayListExtra mit dieser Linie ersetzt

.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(form.getImageContainers().get(0).getImagePath()))); 

Und es tat das Bild anbringen, so kann ich das sagen, es ist nichts falsch mit dem String, der den Pfad speichert. Leider kann ich nicht durchgehen und nur diese Zeile für jedes Bild verwenden, da es nur das letzte verwendet (probierte es). Ich habe Antworten gelesen, die diese Methode verwenden, und andere, die Intent.ACTION_SEND_MULTIPLE verwenden, aber das gibt mir eine leere Auswahl, die mir sagt, dass ich keine Apps habe, die die Aktion ausführen können.

Jeder Grund, warum es nicht funktioniert?

Antwort

0

Die Lösung war ACTION_SEND_MULTIPLE und setType("text/plain") zu verwenden, so dass meine erste Zeile sieht jetzt aus wie

final Intent emailIntent = new Intent(Intent.ACTION_SEND_MULTIPLE).setType("text/plain") 
0

Ich versuche, mehrere Bilder zu einer E-Mail Absicht

ACTION_SEND nicht mehrere Streams unterstützen hinzuzufügen. ACTION_SEND_MULTIPLE does. Also, wenn die ACTION_SEND App versucht EXTRA_STREAM zu bekommen, entweder sie abstürzen oder null zurück, weil sie nicht getParcelableArrayListExtra() oder das Äquivalent Aufruf werden, weil sie den Wert erwarten ein Uri, kein ArrayList von Parcelable Objekte.

Ich habe Antworten lesen, die diese Methode verwenden, und andere, die Intent.ACTION_SEND_MULTIPLE verwenden, aber das gibt mir einen leeren Picker, die mir sagt, ich habe keine Anwendungen haben, die die Aktion perfom können.

Das ist, weil Sie anscheinend keine Anwendungen haben, die die Aktion ausführen können. Nur weil die Apps ACTION_SEND unterstützen, bedeutet das nicht, dass sie ACTION_SEND_MULTIPLE unterstützen müssen.

+0

Gmail nicht mehrere unterstützen kann? –

+0

@CodyHarness: Offensichtlich nicht, obwohl Sie Ihre Ursache helfen, wenn Sie 'setDataAndType()' aufrufen und den MIME-Typ Ihres Inhalts bereitstellen. Sie könnten versucht sein, 'setType()' stattdessen aufzurufen, aber das 'Uri', das Sie im Konstruktor bereitstellen, wird gelöscht. – CommonsWare

Verwandte Themen