My application stores data locally in the native SQLite db, and I want to allow users to export this data by emailing themself a .csv file. In order to do this I'm generating the .csv from the database and writing it to the SD card, then attaching it to an email:
StringBuilder csv = generateFile();
writeFile(csv.toString(),"file.csv");
Intent email = new Intent(android.content.Intent.ACTION_SEND);
email.setType("application/octet-stream");
email.putExtra(android.content.Intent.EXTRA_STREAM, Uri.parse("file://sdcard/file.csv"));
Which all works great. What I'm wondering, though, is if it is possible to skip the step of writing to SD first, and directly attach the data.
Even if it is possible, I recommend against it.
Intents
used to launch activities will be held onto for (potentially) a fairly long time -- as long as the activity in question is "alive" and could conceivably be returned to (e.g., back on the stack, because the user took a phone call while composing the email, then chatted via SMS for a half-hour).
Moreover, Intents
get copied between processes a fair bit as part of this. For example, the email client will be in a different process than your app.
For both of these reasons, you need to keep your Intents
small. The only alternative to a Uri
to the content would be to have the content directly in the extra itself...and that CSV file presumably could get kinda big.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With