私は2つのアプリを作成しました。データはインターネットからダウンロードされています。アンドロイドアプリ間で不変ファイルを共有する
このデータ(いくつかのzipファイルで約40Mb)は同じで、2つのアプリケーションの間で共有したいので、帯域幅が少なく、ユーザーのストレージスペースが少なくて済みます。現時点で
、私は良い解決策を見つけていない:
- もともと、私は公共のダウンロードディレクトリ内のデータを保存しました。 これは簡単な解決策ですが、読み取り権限が必要です。回避する必要があります。 は、それから私は、私は、コンテンツプロバイダ使うことができると考えた(と、入力ストリームをしてたByteBuffer mmaped)コアで、しかし、私のアプリは大きなZipResourceFileに多くのzipファイルに を置く: いくつかの圧縮ファイルが読み込まれ、 いくつかの非圧縮ファイルをコピーします私は
また私のデータを解凍するために、ZIPファイルを取得するファイルを必要とmmapedと
だから、Luceneのデータベースとして使用されている、私はそれを構築することが可能である、シンプルFileProviderを忘れることができますZipFileProvider。私のファイルは、大きなZipResourceFileに入れられ、その部分が提供されます。ぐふこのライブラリーのようなコンテンツプロバイダは、ありません:
https://github.com/jarondl/android-zipfileprovider/blob/master/src/net/jarondl/zipfileprovider/ZipFileProvider.java
しかし、私はいくつかは、そのようなZipFileContentProvider経由のByteBufferをmmaped得れば、長く、安全な生活を持つことができるだろうか? (私はサービスを使うべきですか?) それを提供したZipFileContentProviderのプロセスが亡くなったらどうなりますか? メモリ消費はどうですか?警告は何ですか? ContentProviderは短命で使用されていませんか?
もっと良い解決策はありますか?
UPDATE:
それは本当にアンドロイドは同じ開発者に対し(と他の誰も)からいくつかのアプリケーションのためのディレクトリを共有することができないことを吸います。それとも可能ですか?
アップデート2:
I)が(getExternalFilesDir上のファイルを保存すると考えられるが、以下の公式警告が(何を書くことについて?)私は非常に神経質になっている。が提供するディレクトリが、
注意getExternalFilesDir()および getExternalFilesDirs()にMediaStoreコンテンツの プロバイダがアクセスできない場合は、READ_EXTERNAL_STORAGE権限を持つ他のアプリケーションでも がこれらを含む外部ストレージのすべてのファイルにアクセスできます。ファイルのアクセスを完全に制限するために が必要な場合は、 ファイルを内部ストレージに書き込む必要があります。
ContentResolverから開いたZipInputStreamラッピングInputStreamを使用できませんか? –
それについては考えていませんでした。最後のzipEntryを読むためにファイル全体を走査しなければならないとき、ZipFileProviderと比較したパフォーマンスは恐ろしいはずです... – Lakedaemon