0

私のアプリケーションによると、私は写真といくつかのデータをダウンロードしていて、電話のメモリまたは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カードはありません。ファイル、外部または内部メモリをどこに保存するかを見つけるための他の解決策はありますか?答えてくれてありがとう。任意のアイデアをいただければ幸いです。

4

3 に答える 3

2

これらのメソッドを使用して、外部sd上のフォルダーが存在するかどうかを確認できます。

if(myFolder != null && myFolder.exists()) { /* work here */ }

myFolderは、外部sdを対象とするファイルになります(ベンダーごとに異なるため、内部メモリ内のベンダーマッピングを確認する必要があります)。

悲しいことに、2つのsdsは実際のAndroidの方法ではなく、これによりAndroidは内部のsdが外部のsdであると見なします。

ここに外部sdを見つけるための議論とコード例があります。

于 2012-06-18T07:07:34.840 に答える
1

このスレッドを確認してください:

Androidアプリケーションがデバイス内の2つのSDカードを検出する方法

次に、sdcardのフォルダーが存在するかどうかを確認し、カードが別の方法で存在しない場合を処理できますか?

だから次のようなもの:

sdcardloc = /mnt/sdcard/sdcard1;
if(sdcardloc != null && myFolder.exists()) { /*case where card is mounted*/ }

else { /*handle case where no card is mounted*/}
于 2012-06-18T07:08:45.557 に答える
1

外部SDカード、コンセプトはデバイスベンダーに固有です。Androidでは外部ストレージの概念のみ。またEnvironment.getExternalStorageDirectory()、デバイスの製造元が「外部ストレージ」と見なしたものも指します。

于 2012-06-18T07:10:36.063 に答える