2011-06-30 43 views
4

Android電子メールコンポーザ内のメッセージにZipファイルを添付する必要があります。コンテンツプロバイダにファイルを保存する方法

私のアプリケーションでZipファイルが作成され、アプリケーションのプライベートストレージ領域(getFilesDirectory()経由でアクセス可能)に保存されています。 私はこのZipファイルへのURIを取得し、それをメールインテントオブジェクトに追加しています。

これについていくつかの調査をしたところ、私のアプリケーションデータは他のアプリケーションと共有できませんでした。 Androidの電子メールアプリ)。

この問題を解決するために、コンテンツプロバイダを使用してアプリケーションデータを共有する推奨ソリューションを実装したいと考えています。

まず、私はこれが可能かどうかを確認したいと思います。誰かがこれをどうやって行うかについてのヒントを教えてください。 ZipファイルをアプリケーションのgetFilesDirectory()からコンテンツプロバイダにコピーする方法、およびコンテンツプロバイダURIを電子メールインテントオブジェクトに添付する方法を知っておく必要があります。

私はちょうど私の唯一のデバイス内部ストレージへの私のファイルを保存し、電子メールの作曲に添付する... SDカードに

を私のzipファイルを配置することはできません。

+0

を見てみたいことがあり、そのような

content://com.yourdomain.yourapp.yourproviderclass/some/path 

としてウリのマッチングは、あなたのパッケージ名で始めることがURI、を介して行われる

、あなたの携帯電話にファイルを保存し、それらをメールすることができますか? – nickfox

+0

アプリの個人データディレクトリにzipファイルを保存すると、アプリにのみ表示されます。電子メールアプリに発射される意図は、あなたのアプリの保護されたデータを読むことができません。仲介者としてSDに保存する必要があります。 – yep

+0

@nickfox、はい私はあなたの携帯電話にファイルを保存し、それらを電子メールで送ることができるようにしたいと思います。私は自分のファイルをSDカードに保存したくありません。 – brig

答えて

5

デフォルトでは、ContentProviderには、デバイス上の任意のアプリケーションからアクセスできます。これらのファイルにデバイス上のアプリケーションからアクセスする場合は、getType()openFile()の実際の実装でContentProviderを作成します。 URL content://は、電子メールアプリ、AFAIKで動作するはずです。

Here is a sample projectContentProviderローカルストレージからのファイルを処理します(この場合はWebView)。

0

外部SDカードへの保存を避けたい場合は、ContentProviderは必要ありません。あなたは

openFileOutput("yourzipfile.zip", MODE_WORLD_READABLE) 

と一緒に暮らすとあなたのACTION_SENDのテントと一緒に

putExtra(Intent.EXTRA_STREAM, Uri.fromFile(getFileStreamPath("yourzipfile.zip)) 

を渡すことができます。

ただし、電子メールプログラムでContent-typeが設定されていない可能性があります。

また、電子メールアプリがあなたのファイルをもう必要としないことを確実にする方法はありません。これは、多くのファイルで終了する危険性があるか、古い電子メールの添付ファイルとして新しいコンテンツを送信する危険性があることを意味します。

このソリューションのもう1つの問題は、誰もあなたのzipファイルを読むことができることです。この問題は、ContentProviderソリューションでは発生しません.Interentごとにアクセス許可を与えることができます。つまり、1つの電子メールインテントに対して1つのファイルにのみアクセスを許可することができます。あなたはちょうどあなたがなりたい、理解してhttp://developer.android.com/guide/topics/manifest/provider-element.html

+0

この方法はAPI 17では廃止されており、セキュリティ面では危険で危険です。 – Sandeep

関連する問題