2011-04-23 17 views
13

私は、サーバーからダウンロードしたファイルを保存するアプリケーションを持っています。これらのファイルは私のアプリケーションにとってプライベートではなく、他のアプリケーションからもアクセス可能でなければなりません。私は、SDカードがなくなったときにこれらのファイルを保存する正しいパスが何かを知りたい。内部ストレージにパブリックファイルを保存する

getExternalStorageDirectory() 

内部メモリにアプリケーションのプライベートデータのためにそこにある - - SDカードの場合は、よく知られたAPIがあり、いくつかのデバイスでは

Context.getFilesDir() 

、内蔵メモリは/ EMMCで表され、 /。

誰かが/ emmc /を詳しく調べることができれば、本当に役に立ちます。私はそれが内蔵メモリカードの略で、すべてのデバイスに存在しないことを知っています。しかし、それは本当に内部の記憶を代表していますか?それとも3番目の記憶ですか?

openFileOutput()を使用してファイルを保存する必要があります。MODE_WORLD_READABLE

答えて

9

一部のデバイスでは、内部メモリは/ emmc /で表されます。

/emmc/は、いくつかのデバイス上に存在して、それが内部かもしれないが、それはアプリケーションにアクセスできないことがあり、それがどのようなgetExternalStorageDirectory()リターンであることを起こる場合を除き、それは確かにAndroidのSDKの一部ではありません。

実際に内部メモリを代表していますか?

それとも第三のメモリですか?

デバイスメーカーに問い合わせてください。

MODE_WORLD_READABLEでopenFileOutput()を使用してファイルを保存する必要がありますか?

これは要約では答えることができません。あなたのファイルは他のアプリケーションからもアクセス可能でなければならないと言っていますが、他のアプリケーションがあなたのファイルについて少し気にする理由が示されていません。他のアプリケーションでは、ファイルのディレクトリをスキャンすることはありません。最高でも、ユーザーは外部ストレージを参照することができます。 MODE_WORLD_READABLEというファイルを持つ唯一の理由は、のアプリケーションがファイルを使用して何かを行う別のアプリケーションを起動させる場合です(例:ACTION_VIEWIntent)。

+0

ありがとうCommonsWare!はい、私のアプリケーションがACTION_VIEWで他のアプリケーションを起動するのは、これらのファイルを公開しているのとまったく同じ理由です。また、いくつかのファイルエクスプローラとアプリケーションがSDカードと内部メモリをスキャンするにつれて、これらのファイルを見つけることができるようにしたいと考えています。だから、私の質問は、SDカードが見つからない場合は、ファイルを保存するには、残っている? – Akshay

+0

@Akshay:「一部のファイルエクスプローラとアプリケーションがSDカードと内部メモリをスキャンするため、これらのファイルを見つけることができるようにしたい」 - それは不可能です。そうであれば、それは大きなセキュリティホールです。 "だから、私の質問は、SDカードが見つからない場合にファイルを保存する場所が残っていますか?" - 'getFilesDir()' – CommonsWare

+0

ありがとうCommonsWare!私はこれを明確に理解しようとしています。私のアプリケーションは添付ファイルをダウンロードする電子メールクライアントと比較することができ、ドキュメント閲覧者とメディアプレーヤーはこれらのファイルを開くことができます。 SDカードがない場合、電子メールクライアントはファイルをどこに保存しますか?内部メモリにパブリックディレクトリはありませんか?/internal_memory/downloadsのようなもの?内部メモリをセキュリティホールとしてスキャンするのはなぜですか?確認するだけで、内部メモリはデバイス/携帯電話のメモリを意味します。ごめんなさい。 – Akshay

14

私はこれが古くて受け入れられた答えがあることを認識していますが、質問はまだ関連しており、質問者が望むものを達成する方法があると思います。

言い換えれば、Askerはファイルを保存し、他のアプリからアクセスできるようにしたいと考えています(外部のストレージが追加の許可や可能性など)現在ではない)。

他のアプリから自分のファイルを読めるようにすることができます。

File file = new File(ctx.getCacheDir(), "picture");    
... 
file.setReadable(true, false); 
    // makes file readable to other apps 

// Get another app to view my picture 
Uri uri = Uri.fromFile(file);   
Intent intent = new Intent(Intent.ACTION_VIEW); 
intent.setDataAndType(uri, "image/*"); 
ctx.startActivity(intent); 

setReadableは私のために上記のコードの作品を​​作った - その行せずに、視聴者のアプリがファイルを読み込むことができませんでした。 setReadableはディレクトリ全体で動作するので、おそらく最善の解決策はサブディレクトリ名 'public'を作成してそこにファイルを置くことです。

+3

あなたの命を救う人!受け入れられた答えは、実際の方法ではなく、これをしてはならない理由に焦点を当てています。 –

関連する問題