Reputation: 14427
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.
Upvotes: 10
Views: 5956
Reputation: 1007286
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.
Upvotes: 3