0

サーバーから特定のコンテンツ (レシピ) をダウンロードするためのアプリを構築しています。これまでのところ、アプリケーションでこれを作成しました:

  • ユーザーは、パスワードで保護された zip ファイルを SD カードにダウンロードするため、アプリケーションのみがコード内のパスワードでファイルを抽出できます
  • ボタンを押したイベントを持つユーザーは、コードにパスワードが記述されたファイルを解凍し、レシピ テキストをデータベースに保存します。

画像を抽出したいときに問題が発生します。抽出には問題ありませんが、SD カードに抽出すると、ユーザーがその写真にアクセスして取得できるという問題があります。何らかの方法でSDカードに画像を保存して、ユーザーがアクセスできず、保護されているため、ユーザーが削除できないようにする方法はありますか(したがって、常にアプリケーションで確認する必要はありません。アプリケーションには表示するすべての画像があります) - 私は理論的には、この場合、アプリケーションが SD カード全体をいっぱいにする可能性があり、ユーザーがそれらの写真を削除できないため、これがどのように可能になるかわかりません (写真は何らかの方法でアプリケーションのインストールに関連付けることができますか?)。レシピのテキスト表現では、データベースに直接送信されるため問題はありませんが、blob をデータベースに保存したくありません。

ですから、私の問題を理解していただければ幸いです。それを解決する方法を教えてもらえますか?

4

2 に答える 2

2

ユーザーがアクセスできないように、何らかの形で画像をSDカードに保存する方法はありますか

いいえ。

保護されているため、ユーザーはそれらを削除できません

いいえ。

それを解決する方法を教えてもらえますか?

画像は外部ストレージではなく内部ストレージに保管してください。

于 2013-09-12T14:53:20.170 に答える
1

[1] を使用Context.getExternalFilesDir()して、そこに画像ファイルを配置できます。ただし、ご要望にお応えすることはできませんので、あらかじめご了承ください。メソッドに関する観察と提案のカップルgetExternalFilesDir:

ユーザーがアクセスできないようにSDカードに画像を保存し、ユーザーが削除できないように保護する方法はありますか

Android の場合でも、ユーザーが SD カードを PC の SD リーダーに挿入した場合でも、SD カードの内容にアクセスして削除できます。画像を盗難から保護したい場合、デバイス上で画像を復号化する必要はありません。たとえば ContentProvider を使用して、アプリケーションですべての画像を暗号化し、オンザフライで復号化することができます。

そのため、アプリケーションを常に確認する必要はありません。アプリケーションには表示するすべての画像があります

しかし、ぜひともそうすべきです!前述したように、ユーザーはいつでも SD からファイルを削除したり、内部メモリのアプリケーション フォルダーからファイルを削除したりできます (たとえば、[設定] -> [アプリ] で [データの消去] を押す)。プロセスをできるだけ迅速かつ簡単にしたい場合は、すべての画像データを大きな blob ファイル (オプションで暗号化) に入れ、それが存在するかどうか、適切なサイズであるかどうか (およびオプションで最新かどうか) を確認することができます。 .

理論的には、この場合、アプリケーションは SD カード全体を使い果たし、ユーザーがそれらの写真を削除することを許可しない可能性があります (おそらく、写真は何らかの方法でアプリケーションのインストールに関連付けることができますか?

はい!Context.getExternalFilesDirそのフォルダに入れたものを使用すると、アプリケーション データとしてカウントされ、ユーザーがクリアできます。アプリケーションがアンインストールされたときにもクリアされます。これは、ユーザーの SD に何メガバイトもの不要なファイルを残したくないので便利です。

[1] http://developer.android.com/reference/android/content/Context.html#getExternalFilesDir(java.lang.String)

于 2013-09-12T15:31:22.240 に答える