Android Creación de un archivo de entrada residente en la memoria que se puede adjuntar a un correo electrónico

El objetivo final quedará claro en breve.

Quiero crear un objeto de archivo y, en lugar de obtener datos de un archivo físico real, quiero proporcionar yo mismo el búfer.

Luego, quiero usar este archivo, que en realidad no existe en la sdcard o en cualquier lugar fuera de mi aplicación, asígnele un nombre y envíelo por correo electrónico como archivo adjunto (usando EXTRA_STREAM).

Encontré el siguiente fragmento de código, por Adriaan Koster (@adriaankoster), el postEscribir byte [] al archivo en 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>

Lo utilicé para crear esta función.

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

y aquí es donde estoy atascado, porque cuando lo uso:

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

Sé que de los ejemplos que he visto, el segundo argumento debería ser un URI, pero: ¿Cómo creo unvirtual URI para encajar mi archivo?

EDITAR: La opción de adjuntar datos directamente desde la aplicación es importante para cierto tipo de aplicaciones. A saber, las aplicaciones de seguridad y banca que no quieren mover demasiados datos confidenciales. Seguramente, si los datos no llegan a la tarjeta SD y van directamente a un archivo adjunto de correo, es más difícil de localizar que dentro de la memoria de la aplicación.
Este no es mi caso específico, pero quería señalar que es importante tener esta capacidad.

Respuestas a la pregunta(4)

Su respuesta a la pregunta