5

内部メモリと外部ストレージの空き容量を取得する方法を知っています。

しかし、内部メモリの最大容量と外部ストレージの最大容量を知りたいのですが、Googleでそれに関する情報を見つけることができません

それを達成することは可能ですか?

ありがとう

4

4 に答える 4

6

API 18 でいくつかの新しいメソッドが導入されました。これは、合計ストレージ (内部 + 外部) を取得するために使用したコードです。

private static final long KILOBYTE = 1024;

StatFs internalStatFs = new StatFs( Environment.getRootDirectory().getAbsolutePath() );
long internalTotal;
long internalFree;

StatFs externalStatFs = new StatFs( Environment.getExternalStorageDirectory().getAbsolutePath() );
long externalTotal;
long externalFree;

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
    internalTotal = ( internalStatFs.getBlockCountLong() * internalStatFs.getBlockSizeLong() ) / ( KILOBYTE * KILOBYTE );
    internalFree = ( internalStatFs.getAvailableBlocksLong() * internalStatFs.getBlockSizeLong() ) / ( KILOBYTE * KILOBYTE );
    externalTotal = ( externalStatFs.getBlockCountLong() * externalStatFs.getBlockSizeLong() ) / ( KILOBYTE * KILOBYTE );
    externalFree = ( externalStatFs.getAvailableBlocksLong() * externalStatFs.getBlockSizeLong() ) / ( KILOBYTE * KILOBYTE );
}
else {
    internalTotal = ( (long) internalStatFs.getBlockCount() * (long) internalStatFs.getBlockSize() ) / ( KILOBYTE * KILOBYTE );
    internalFree = ( (long) internalStatFs.getAvailableBlocks() * (long) internalStatFs.getBlockSize() ) / ( KILOBYTE * KILOBYTE );
    externalTotal = ( (long) externalStatFs.getBlockCount() * (long) externalStatFs.getBlockSize() ) / ( KILOBYTE * KILOBYTE );
    externalFree = ( (long) externalStatFs.getAvailableBlocks() * (long) externalStatFs.getBlockSize() ) / ( KILOBYTE * KILOBYTE );
}

long total = internalTotal + externalTotal;
long free = internalFree + externalFree;
long used = total - free;
于 2013-08-14T15:55:02.427 に答える
4
StatFs stat = new StatFs(Environment.getExternalStorageDirectory().getPath());
long bytesAvailable = (long)stat.getBlockSize() * (long)stat.getBlockCount();
long megAvailable = bytesAvailable / 1048576;

ソース

また、これを内部サイズに使用します。

StatFs stat = new StatFs(Environment.getDataDirectory().getPath());
于 2013-01-25T23:15:48.733 に答える
0

この方法は、すべての電話で機能するわけではありません。ほとんどの電話は、ユーザーが使用できるメモリの総量を返しますが、システム メモリは少なくなります。NDK を使用して C++ メソッドで 'df -h' linux コマンドを使用してみてください。したがって、長短はできません。

于 2017-10-22T22:20:16.453 に答える