Android Tworzenie rezydentnego pliku wejściowego, który można dołączyć do wiadomości e-mail
Ostateczny cel zostanie wkrótce wyjaśniony.
Chcę utworzyć obiekt pliku i zamiast pobierać dane z prawdziwego zbioru fizycznego, chcę sam zapewnić bufor.
Następnie chcę użyć tego pliku, który tak naprawdę nie istnieje na sdcard lub gdziekolwiek poza moją aplikacją, nadaj mu nazwę i wyślij go pocztą elektroniczną jako załącznik (używając EXTRA_STREAM).
Znalazłem następujący fragment kodu, autorstwa Adriaana Kostera (@adriaankoster), postaNapisz bajt [] do pliku w Javie
<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>
Użyłem go do utworzenia tej funkcji
<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>
a tu utknąłem, bo kiedy go używam:
<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>
Wiem z przykładów, które widziałem, drugi argument powinien być identyfikatorem URI, ale: Jak utworzyćwirtualny URI pasujący do mojego pliku?
EDYTOWAĆ: Opcja dołączania danych bezpośrednio z aplikacji jest ważna dla niektórych rodzajów aplikacji. Mianowicie aplikacje zabezpieczające i bankowe, które nie chcą zbytnio przenosić wrażliwych danych. Z pewnością, jeśli dane nie docierają do karty SD i trafiają bezpośrednio do załącznika do poczty, trudniej jest je wykryć niż w pamięci aplikacji.
To nie jest mój szczególny przypadek, ale chciałem podkreślić, że ta zdolność jest ważna.