Конечная цель будет понятна в ближайшее время.
Я хочу создать файл-объект и вместо того, чтобы получать данные из реального физического файла, я хочу сам предоставить буфер.
Затем я хочу использовать этот файл, который на самом деле не существует в SD-карте или где-либо вне моего приложения, дайте ему имя и отправьте его по электронной почте в виде вложения (используя EXTRA_STREAM).
Я нашел следующий бит кода: Adriaan Koster (@adriaankoster), пост Write byte [] для файла в Java
// 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);
Я использовал его для создания этой функции
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;
}
и вот где я застреваю, потому что когда я его использую:
// 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()));
Я знаю из примеров, которые я видел, второй аргумент должен быть URI, но: Как создать URI виртуальный, чтобы соответствовать моему файлу?
EDIT:
Возможность прикрепления данных непосредственно из приложения важна для определенных приложений. А именно, приложения безопасности и банковского обслуживания, которые не хотят слишком сильно перемещать конфиденциальные данные. Разумеется, если данные не доходят до SD-карты и переходят непосредственно в почтовую вставку, ее сложнее нюхать, чем в памяти приложения.
Это не мой конкретный случай, но я хотел бы указать, что эта возможность важна.