Android Создание резидентного входного файла, который можно прикрепить к электронному письму

Конечная цель скоро будет ясна.

Я хочу создать файловый объект и вместо того, чтобы получать данные из реального физического файла, хочу сам предоставить буфер.

Затем я хочу использовать этот файл, который на самом деле не существует на 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 а идут сразу в почтовое вложение то нюхать тяжелее чем в памяти приложения.
Это не мой конкретный случай, но я хотел указать, что эта возможность важна.

12
задан Community 23 May 2017 в 12:24
поделиться