2009-12-02 9 views
10

私のアプリケーションはローカルのデータをネイティブのSQLiteデータベースに保存します。ユーザーは.csvファイルを電子メールで送信してこのデータをエクスポートできます。その後、電子メールに添付、これを行うために、私は、データベースから.csvファイルを生成することだし、SDカードに書き込む:すべてが素晴らしい作品Android:SDに書き込むことなくメールをファイルに添付できますか?

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")); 

を。しかし、最初にSDに書き込むステップをスキップして、データを直接添付することができるかどうかは疑問だ。

+1

答えとして投稿するつもりはありませんが、メモリ内のストリームにCSVファイルを書き込んだ後、そのストリームを電子メールの意図に渡すことはできませんか? – MattC

+2

@MattC:いいえ、ストリームである「余分な」タイプがないためです。 – CommonsWare

+1

+1良い質問.. – SRam

答えて

3

可能であれば、それに対してお勧めします。

Intentsアクティビティの起動にはかなり時間がかかりますが、問題のアクティビティが "生きている"限り(例えばスタックに戻ってくるなど)ユーザーは電子メールの作成中に電話をかけてから30分SMSでチャットしました)。

さらに、Intentsは、プロセスの間で公正なビットをこれの一部としてコピーします。たとえば、電子メールクライアントはあなたのアプリとは別のプロセスに入ります。

これらの両方の理由から、Intentsは小さくする必要があります。コンテンツへのUriへの唯一の選択肢は、追加のコンテンツに直接コンテンツを持たせることです...そのCSVファイルはおそらくちょっと大きくなる可能性があります。

+0

私はこれが本当にイライラしていると思われ、SDがマウントされていない場合にユーザーのpovと無関係に見えるので、これを達成したかったのです。しかし、これは健全な助言であり、私はそれに取り組むことができます。 – Bee

+3

あなたはそれをあなたのアプリケーションローカルファイル格納領域(getFilesDir())に入れて、それを世界で読めるようにすることができます。私は通常、アクセス制御フラグを混乱させませんが、ファイルを読むためには電子メールクライアントが必要です。 SDカードはそれに対応していますが、あなたが指摘するように、SDカードはないと考えられます。 – CommonsWare

+0

FYI:TransactionTooLargeException - Intentに渡されるデータが多すぎる場合。 – kaay

関連する問題