Mehrere Emailanhänge größe 0byte

  • 7 Antworten
  • Letztes Antwortdatum
S

surf_andre

Neues Mitglied
0
Hallo zusammen,
ich habe mal wieder an einer App rumgebastelt und stehe gerade etwas auf dem Schlauch was das Verhalten von Android angeht.
Wie im Titel schon erwähnt habe ich in meiner App eine Funktion eingebaut mit der ich zwei Dateien per Email verschicken will. Der Aufruf des Mailprogramms funktioniert auch. Die anzuhängende Dateien werden auch in Emailprogramm angefügt und angezeigt. Nur werden diese Dateien mit der der Größe 0 Byte verschickt. Es scheint so als wenn da nur der Text übergeben wird.

Ich habe mal den Codeauszug angefügt vielleicht weiß jemand warum das so ist.
Code:
public void email(String emailTo, String emailText, List<String> filePaths) {
      // need to "send multiple" to get more than one attachment
      final Intent emailIntent = new Intent(
          android.content.Intent.ACTION_SEND_MULTIPLE);
      emailIntent.setType("text/plain");
      emailIntent.setFlags(android.content.Intent.FLAG_ACTIVITY_NEW_TASK);
      emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL,
          new String[] { emailTo });
      // emailIntent.putExtra(android.content.Intent.EXTRA_CC,
      // new String[]{emailCC});
      // emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
      emailIntent.putExtra(Intent.EXTRA_TEXT, emailText);
      // has to be an ArrayList
      ArrayList<Uri> uris = new ArrayList<Uri>();
      // convert from paths to Android friendly Parcelable Uri's
      for (String file : filePaths) {
        File fileIn = new File(file);
        Uri u = Uri.fromFile(fileIn);
        uris.add(u);
      }
      emailIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);
      startActivity(Intent.createChooser(emailIntent, "Send mail..."));
    }


Gruß André
 
Meine erste vermutung wäre, das text/plain nicht der richtige type für eine email mit anhängen ist.
 
Wo liegen die Dateien? Wenn sie im internen Speicher deiner App sind, hat die E-Mail-App vermutlich keine Berechtigung auf die Files. Du müsstest die dann entweder zuerst auf die SD-Karte kopieren (oder WORLD_READABLE setzen) oder über einen Content Provider zur Verfügung stellen.
 
Hallo,
@Zoopa
Die Dateien liegen auf der sd karte. Wenn ich sie einzeln aus der App verschicke dann geht das komischerweise . Von daher bin ich der Meinung das die leserechte haben. Wie meinst denn das die über einen Content Provider zur Verfügung zu stellen...
 
Wenn die Daten auf der SD-Karte sind, dann hast du die Berechtigungen.

Kurz gesagt kann man mit einem Content Provider anderen Apps Zugriff auf Daten geben. Damit wäre es z.B. auch möglich, jemandem Zugriff auf eine Datei im privaten App-Speicher zu ermöglichen. Aber da deine Dateien auf der SD-Karte sind, brauchst du das hier nicht ;)

Versuch mal wie amfa gesagt hat einen anderen Content Type, z.B. message/rfc822 statt text/plain

Ansonsten könnte ich mir noch vorstellen, dass die Pfade nicht das richtige Format haben, zum Beispiel file:///sdcard/bla statt /sdcard/bla oder sowas in der Art.

Du hast noch gesagt, dass einzelne Anhänge funktionieren. Benutzt du dafür genau den gleichen Code, wobei in List<String> filePaths einfach nur ein Eintrag drin ist?
 
Zuletzt bearbeitet:
Hallo
ich das noch einmal aus Probiert mit dem anderen Content Typ message/rfc822 klappt auch nicht. Den Pfad übergebe ich wie im Logcat gezeigt.

logcat sagt dazu
01-10 12:43:25.546: V/Debug(26564): Pfad: /mnt/sdcard/WESlog_DAT/WESlog.log
.
.
.
01-10 12:43:29.460: V/k9(26541): /file%3A/mnt/sdcard/WESlog_DAT/WESlog.txt
01-10 12:43:29.460: V/k9(26541): new attachment.size: 0
Die einzelnen Dateien habe ich vorher mit diesem Programmteil verschickt

Code:
public void sendEmail() {

      Intent emailIntent = new Intent(
android.content.Intent.ACTION_SEND);
      emailIntent.setFlags(android.content.Intent.FLAG_ACTIVITY_NEW_TASK);
      emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT,
          getString(R.string.mailTitel));
      emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, "");
      emailIntent.putExtra(android.content.Intent.EXTRA_TEXT,
          "WESlog Datei 3.0");

      String FilePath = "file://" + ExtMount + File.separator + Dirpath
          + File.separator + Filename2;

      if (DEBUGGER) {
        Log.v(TAG, "Email " + FilePath);
      }

      Uri emailUri = Uri.parse(FilePath);
      emailIntent.putExtra(android.content.Intent.EXTRA_STREAM, emailUri);

      emailIntent.setType("plain/text");
      startActivity(Intent.createChooser(emailIntent, "Send email using"));
    }
Ist im Grunde das gleiche nur das ich hier die Uri mit .parse erzeuge und das der Intent ACTION_SEND statt ACTION_SEND_MULTIPLE

Gruß Andre

Der ursprüngliche Beitrag von 12:56 Uhr wurde um 13:41 Uhr ergänzt:

Hallo,
so ist gelöst....
danke Zoopa hast mich auf die Richtige Spur gebracht mit dem Pfad

der Fehler war in der Zusammensetzung des Strings für die Dateipfade. Ich hatte da
String FilePath ="file://" + ExtMount + File.separator + Dirpath + File.separator + Filename;
der ausdruck "file://" ist zuviel und macht blödsinn.
Wobei das bei dem String in der einzel Verschickung schon richtig ist....

Da es Textdateien sind ist der Content Typ "text/plain" scheinbar der richtige denn mit "message/rfc822" funktioniert das auch nicht.

Danke und Gruß André
 
surf_andre schrieb:
so ist gelöst....
danke Zoopa hast mich auf die Richtige Spur gebracht mit dem Pfad

der Fehler war in der Zusammensetzung des Strings für die Dateipfade. Ich hatte da der ausdruck "file://" ist zuviel und macht blödsinn.
Wobei das bei dem String in der einzel Verschickung schon richtig ist....

Da es Textdateien sind ist der Content Typ "text/plain" scheinbar der richtige denn mit "message/rfc822" funktioniert das auch nicht.

Danke und Gruß André

ok gut ;) Das Problem lag in dem Fall (indirekt) am Wechsel von Uri.parse zu Uri.fromFile.

Die Zeile
Code:
File fileIn = new File(file);
ruft den Konstruktor von File mit einem String-Parameter auf, und der erwartet einen Dateipfad und keine URI (also etwas ohne file://).

Das File zeigt dann fälschlicherweise auf den Pfad
/file%3A/mnt/sdcard/WESlog_DAT/WESlog.txt
und dieser Pfad existiert natürlich nicht.

Mit den Content-Types bei E-Mails kenne ich mich zu wenig aus. Ich dachte, es wäre mal einen Versuch wert ;)
 
  • Danke
Reaktionen: surf_andre
Schön das es doch so einfach war...
Habe dabei auch festgestellt das ich einfach noch nicht genug programmiere und mir doch noch ne menge an Hintergrundwissenfehlt...
Gibt es eigentlich die "befehlserklärung"auch auf deutsch?

Wie bekomme ich den ganzen Thread aufgelöst umgestellt....


Gruß Andre
 
Zurück
Oben Unten