Android Erstellen einer speicherresidenten Eingabedatei, die an eine E-Mail angehängt werden kann

Das endgültige Ziel wird in Kürze klar sein.

Ich möchte ein Dateiobjekt erstellen und anstatt Daten aus einer realen physischen Datei abzurufen, möchte ich den Puffer selbst bereitstellen.

Dann möchte ich diese Datei, die nicht wirklich auf der SD-Karte oder irgendwo außerhalb meiner App vorhanden ist, verwenden, benennen und per E-Mail als Anhang senden (mit EXTRA_STREAM).

Ich habe den folgenden Code gefunden, von Adriaan Koster (@adriaankoster), dem BeitragSchreiben Sie das Byte [] in die Datei in Java

<code>// convert byte[] to File
ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
ObjectInputStream ois = new ObjectInputStream(bis);
File fileFromBytes = (File) ois.readObject();
bis.close();
ois.close();

System.out.println(fileFromBytes);
</code>

Ich habe es benutzt, um diese Funktion zu erstellen

<code>private File fileFromBytes(byte[] buf) {
    File f = null;
    try {
        ByteArrayInputStream bis = new ByteArrayInputStream(buf);
        ObjectInputStream ois = new ObjectInputStream(bis);
        f = (File) ois.readObject();
        bis.close();
        ois.close();
    }
    catch (Exception e) {}
    return f;
}
</code>

und hier stecke ich fest, denn wenn ich es benutze:

<code>// When sent as body the mail is sent OK
// emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, dump());

// When I try to attach the mail is empty
emailIntent.putExtra(android.content.Intent.EXTRA_STREAM, fileFromBytes(dump().getBytes()));
</code>

Ich weiß aus Beispielen, dass das zweite Argument eine URI sein sollte, aber: Wie erstelle ich einevirtuell URI für meine Datei?

BEARBEITEN: Die Option, Daten direkt aus der Anwendung anzuhängen, ist für bestimmte Arten von Anwendungen wichtig. Nämlich Sicherheits- und Bankanwendungen, die vertrauliche Daten nicht zu sehr verschieben möchten. Wenn die Daten die SD-Karte nicht erreichen und direkt an einen E-Mail-Anhang gesendet werden, ist es mit Sicherheit schwieriger als im Anwendungsspeicher zu riechen.
Dies ist nicht mein spezifischer Fall, aber ich wollte darauf hinweisen, dass diese Fähigkeit wichtig ist.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage