私のアプリケーションによると、私は写真といくつかのデータをダウンロードしていて、電話のメモリまたはSDカードのどこかにそれらを保存する必要があります。写真はかなり大きくなる可能性があるので、SDカードに保存することにしました。以下のコードを使用して、SDカードが使用可能かどうかを判断しています。SDカードを使用している場合は、電話のメモリを使用しています。しかし、問題は、SDカードを取り出すと、起動時にアプリケーションがクラッシュし、FileNotFound例外が発生することです。私の知る限り、電話にはSDカードが内蔵されているので、
android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)
常に「マウント済み」を返します。外付けSDカードが実際に排出されていることをどのように理解できますか?
編集:私は以下のコードを使用していて、私の電話に内部SDカードがあるので、SDカードが利用可能かどうかを確認しようとしました
android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)
常にtrueを返し、SDカードなしでディレクトリを作成します。したがって、ディレクトリのnullのチェックは、ファイルが存在するかどうかを理解するために機能していません。これが私のコードです。
if (android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)) {
cacheDir=new File(context.getExternalFilesDir(null), applicationDirectory + folderName);
}
else {
cacheDir = new File(context.getCacheDir(), applicationDirectory + folderName);
}
if(!cacheDir.isDirectory())
cacheDir.mkdirs();
したがって、私の解決策によれば、必要なファイルを読み取ろうとし、FileNotFoundExceptionが発生した場合は、アプリケーションの起動時にすべてのコンテンツをアセットフォルダーからディレクトリ(SDカードまたは電話メモリ)にコピーし、共有のブール値で制御します環境設定。このようにして、ユーザーがSDカードを取り出すと、コンテンツが電話のメモリにコピーされ、そのディレクトリから作業されます。
一部のファイルを保存するには約10MBのキャッシュスペースが必要です。このソリューションでは(効果があるかどうかはわかりません)、ユーザーがアプリケーションを実行しているときに、SDカードと電話のメモリの両方にコンテンツを保存します。 SDカードはありません。ファイル、外部または内部メモリをどこに保存するかを見つけるための他の解決策はありますか?答えてくれてありがとう。任意のアイデアをいただければ幸いです。