2016-11-28 12 views
0

私は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権限を持つ他のアプリケーションでも がこれらを含む外部ストレージのすべてのファイルにアクセスできます。ファイルのアクセスを完全に制限するために が必要な場合は、 ファイルを内部ストレージに書き込む必要があります。

+0

ContentResolverから開いたZipInputStreamラッピングInputStreamを使用できませんか? –

+0

それについては考えていませんでした。最後のzipEntryを読むためにファイル全体を走査しなければならないとき、ZipFileProviderと比較したパフォーマンスは恐ろしいはずです... – Lakedaemon

答えて

1

それは本当にアンドロイドは同じ開発者に対しからいくつかのアプリケーションのためのディレクトリを共有することができないことを吸います。それとも可能ですか?

あなたの状態この前にその可能なことが、あなたはそれ

もともとを避けるためにしようとしている、私は公共のダウンロードディレクトリ内のデータを保存しました。これは簡単な解決策ですが、読み込み権限が必要です。私はそれを避けたいと思います。

読み取り権限の使用に問題はありません。またはその問題について書面による許可を得ることができます。あなたがそれを避けたい特定の理由はありますか?

あなたの2つのアプリケーションに適切な場合には、読み書きの権限を追加して、独自の再利用フォルダ構造にアクセスします。パブリックダウンロードディレクトリである必要はありません。例えば<com.MyCompanyNamespace>/Data

次に、あなたはできる:

  1. は、パブリックフォルダを確認し、あなたのフォルダに移動エルス
  2. あなたのフォルダを確認してください。
  3. ダウンロードサイトに直接アクセスすることはできません。

読み取り/書き込みの使用に関する問題はありません。また、アプリストアやアプリで、なぜアクセス許可が必要なのかを簡単に知ることができます。

私はあなたにもっと多くの質問が残っていることを知っていますが、うまくいけば、この簡単な答えは必要性を取り除きます。

+1

1)お金:一部のユーザーは許可を求めるアプリケーションを避ける 2)セキュリティ:外部ストレージ(getExternalFilesDir())で私のファイルにアクセスし、それらを微妙に改ざんする(アプリがクラッシュすることがある) – Lakedaemon

+0

@ Lakedaemon私はポイント1に同意しますが、これは、インストール前にそのパーミッションがどのようなものが使用されているかを指定することによって、すべてではないにしてもほとんどが再保証される小さなパーセンテージです。別名、アプリ間で共有ファイルを保存する。デバイスから他のデータを読み取らない。 (上記で指定されている)2.その後、権限を全く読み取らない他のオーディエンスにヒットしました。それは容認できるほどあなたのコントロールを超えています。しかし、そのようなことが起こるなら、それはすべてのファイルをターゲットにしなければならないと考えるべきである(具体的であるとは思わない)。すべてのアプリ/デバイスが影響を受ける。あなたのアプリは非難されることはありません。 – Doomsknight

+0

各アプリケーションがgetExternalFileDirs()にデータを書き込み、他のアプリのデータにアクセスするためのアクセス権を要求する場合は、実際には、単一の読み取り権をトレードオフとして要求するクラス最高のパフォーマンスを提供します。 より良い解決策が見つからない場合、私はあなたの答えを受け入れるでしょう。 – Lakedaemon