Android Criando um arquivo de entrada residente na memória que pode ser anexado a um email
O objetivo final ficará claro em breve.
Eu quero criar um objeto de arquivo e, em vez de obter dados de um arquivo físico real, eu quero fornecer o buffer eu mesmo.
Então, eu quero usar este arquivo, que realmente não existe no sdcard ou em qualquer lugar fora do meu aplicativo, dar-lhe um nome e enviá-lo por e-mail como um anexo (usando o EXTRA_STREAM).
Eu encontrei o seguinte pedaço de código, por Adriaan Koster (@ adriaankoster), o postEscreva byte [] para o arquivo em 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>
Eu usei para criar essa função
<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>
e aqui é onde eu estou preso, porque quando eu 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>
Eu sei de exemplos que eu vi o segundo argumento deve ser um URI, mas: Como faço para criar umvirtual URI para ajustar meu arquivo?
EDITAR: A opção de anexar dados diretamente do aplicativo é importante para determinados tipos de aplicativos. Ou seja, aplicativos de segurança e bancários que não querem mover muito os dados confidenciais. Certamente, se os dados não chegam ao sdcard e vão diretamente para um anexo de e-mail, é mais difícil farejar do que dentro da memória do aplicativo.
Este não é o meu caso específico, mas queria salientar que essa capacidade é importante ter.