Androidの合計空き容量を確認したい場合は、通常、内部ストレージと外部ストレージ(SDカード)の両方を確認します。
SOの回答のいくつかで読んだ内容に基づいて、次のような内部ストレージデータ(空き領域、使用可能な領域など)が見つかります。
File path = Environment.getDataDirectory();
StatFs stat = new StatFs(path.getPath());
long blockSize = stat.getBlockSize();
long totalBlocks = stat.getBlockCount();
long availableBlocks = stat.getAvailableBlocks();
//Logging added to make sure I am not going mad
Log.v(TAG,"Available Blocks: "+Long.toString(availableBlocks));
Log.v(TAG,"Total Blocks: "+Long.toString(totalBlocks));
Log.v(TAG,"Block size: "+Long.toString(blockSize));
Androidデバイスの外部ストレージ(SDカード)を取得したい場合は、次のようなコードを実行します。
FilePath path = Environment..getExternalStorageDirectory();
StatFs stat = new StatFs(Environment.getPath());
this.extblockSize = stat.getBlockSize();
long exttotalBlocks = stat.getBlockCount();
long extavailableBlocks = stat.getAvailableBlocks();
//More logging to ensure I am not mad!
Log.v(TAG,"EXTAvailable Blocks: "+Long.toString(extavailableBlocks));
Log.v(TAG,"EXTTotal Blocks: "+Long.toString(exttotalBlocks));
Log.v(TAG,"EXTBlock size: "+Long.toString(extblockSize));
これは、Androidデバイスで外部ストレージと内部ストレージを読み取る方法です。
私が正しいと仮定すると、私は少し問題があります。上記のコードをSamsungGalaxySIIIで実行すると、上記のコードはまったく同じ量のメモリを返します。これで、Samsungに約25GBの内部メモリがあり、4GBのSDカードが入っていることがわかりました。
ただし、これらのコードは両方とも、合計25GBが正しく、23GBが無料で、これも正しいですが、内部ストレージに対してのみ返されます。SDカードのファイルシステム情報の読み方がわからない。出力される実際の値については、以下のログ出力を参照してください。
01-14 20:49:25.485: V/VLRApplication(730): Available Blocks: 6031460
01-14 20:49:25.485: V/VLRApplication(730): Total Blocks: 6702651
01-14 20:49:25.485: V/VLRApplication(730): Block size: 4096
01-14 20:49:25.485: V/VLRApplication(730): EXTAvailable Blocks: 6031460
01-14 20:49:25.485: V/VLRApplication(730): EXTTotal Blocks: 6702651
01-14 20:49:25.485: V/VLRApplication(730): EXTBlock size: 4096
だから私はこの概念を誤解しているに違いありません。誰かが私のためにこれを明確にしてくれませんか?Environment.getExternalStorageDirectory()
SDカードへのパスを設定しないように呼びかけていますか?ちなみに、私はAVDエミュレートされたデバイスでこれを試していません。