2012-04-03 22 views
2

私のアプリがサーバーからファイルをダウンロードし、外部のサードパーティのアプリケーションでそれらのファイルを開くことを許可する機能を開発中です。タイプ)。Android:ダウンロードしたファイルを共有する

ファイルは、MIMEタイプとファイル拡張子を含むメタデータを含むバイト配列としてダウンロードされ、格納されます。

カスタムContentProvider私のアプリはダウンロードされたファイルを制御する必要があるため、カスタムのContentProviderのように見えます。つまり、他のアプリケーションによるアクセスは読み取り専用でなければなりません。 。

私のカスタムContentProviderの実装については、いくつか不明です。私だけを見てきましたチュートリアルはそれだけで上書きしてopenFile()を実装し、query()insert()など「何もしない」とスタブ・メソッドを実装するために十分なされた2

  1. 間でのデータ共有に関係しているように見えましたか?
  2. openFile()を実装する方法があるとすれば、どのようにバイト配列からParcelFileDescriptorを作成することができますか?

注:できる限りAPIレベル3(カップケーキ)までサポートする必要があります。

答えて

2

もう少し掘り下げて、最後にオープンAndroidのAttachmentProvider実装(電子メールクライアント用)のthis sourceを見つけました。

だから、私自身の質問に答えるために:私はopenFile()getType()query()を実装する必要がありますように

  1. に見えます。それらのquery()実装は、表示名、URI、ファイルサイズ、および '_ID'列(as recommended by the dev guide)の列へのアクセスを提供します。
  2. ParcelFileDescriptorは具体的にはFileで動作するように設計されています(私はその名前に手がかりがあると思います)。バイト配列をファイルシステムに書き込んでから、FileParcelFileDescriptorを作成する方法があります。幸運なことに、他のアプリが自分のファイルを迷惑にならないように、私のアプリのプライベートフォルダに書き込むことができます。
+0

MemoryFileを使用することもできます。私は今このソリューションに取り組んでいます。うまくいけば、パフォーマンスは通常のファイルより速いです。 – Georgie

+0

上記の私のコメントに関しては、コンテンツプロバイダのopenFile()実装でMemoryFileを使用しようとしましたが、成功しませんでした。 1つの理由は、最近のAndroidバージョンでは、MemoryFileに関連するParcelFileDescriptorのサポートが消えているということです。その前にも、アクセスするにはリフレクショントリックが必要でした。 – Georgie

+0

バイト配列を 'ParcelFileDescriptor'に渡す方法はありますか?セキュリティ上の理由から、PDFファイルを電話に保存することはできません。 –

関連する問題