Конечная цель скоро будет ясна.
Я хочу создать файловый объект и вместо того, чтобы получать данные из реального физического файла, хочу сам предоставить буфер.
Затем я хочу использовать этот файл, который на самом деле не существует на SD-карте или где-либо еще за пределами моего приложения, дать ему имя и отправить по электронной почте в виде вложения (используя EXTRA_STREAM).
Я нашел следующий фрагмент кода, автор Adriaan Koster (@adriaankoster), пост Write byte[] to File in 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, чтобы он соответствовал моему файлу?
РЕДАКТИРОВАТЬ:
Возможность присоединения данных непосредственно из приложения важна для приложений определенного типа. А именно, безопасность и банковские приложения, которые не хотят слишком много перемещать конфиденциальные данные. Наверняка если данные не доходят до sdcard а идут сразу в почтовое вложение то нюхать тяжелее чем в памяти приложения.
Это не мой конкретный случай, но я хотел указать, что эта возможность важна.