LISTORY

안드로이드 저장소 용량 확인 방법 본문

IT/안드로이드

안드로이드 저장소 용량 확인 방법

LiStoryTeller 2017. 8. 9. 17:44


안드로이드에서 파일 탐색기와 같은 어플리케이션을 개발중이거나 또는 새로운 파일을 생성하기 위해선 현재 기기의 저장 공간은 어떻게 되는지, 또 사용 가능한 용량은 어느정도 인지 확인할 필요가 있을 경우가 있습니다.


안드로이드에서 현재 기기의 총 저장 용량과 사용 가능한 용량이 어느정도 확인하기 위해서는 StatFs 클래스를 사용해야 합니다.


StatFs는 file system의 정보를 전달해주는 클래스로, 정보를 알기 원하는 경로를 넣어 생성할 수 있습니다.


내부저장소와 외부저장소의 용량을 알고 싶은 경우, 각각의 경로를 구하는 코드를 넣어줍니다.


외부저장소 : getDataDirectory()

내부저장소 : getExternalStorageDirectory()


StatFs를 사용하여 총 저장 용량과 사용 가능한 용량을 확인하는 코드는 다음과 같습니다.


private boolean isExternalMemoryAvailable(){
return Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);
}

private void checkInternalStorageAllMemory() {
StatFs stat= new StatFs(Environment.getDataDirectory().getPath());
long blockSize = stat.getBlockSizeLong();
long totalBlocks = stat.getBlockCountLong();

_inStAllMemory = blockSize * totalBlocks;
}

private void checkInternalAvailableMemory() {
StatFs stat= new StatFs(Environment.getDataDirectory().getPath());
long blockSize = stat.getBlockSizeLong();
long availableBlocks = stat.getAvailableBlocksLong();

_inStAvailableMemory = blockSize * availableBlocks;
}

private void checkExternalStorageAllMemory() {
if(isExternalMemoryAvailable() == true){
StatFs stat = new StatFs(Environment.getExternalStorageDirectory().getPath());
long blockSize = stat.getBlockSizeLong();
long totalBlocks = stat.getBlockCountLong();

_exStAllMemory = totalBlocks * blockSize;
}
}

private void checkExternalAvailableMemory() {
if(isExternalMemoryAvailable() == true){
File file = Environment.getExternalStorageDirectory();
StatFs stat = new StatFs(file.getPath());
long blockSize = stat.getBlockSizeLong();
long availableBlocks = stat.getAvailableBlocksLong();

_exStAvailableMemory = availableBlocks * blockSize;
}
}


안드로이드 외부저장소는 현재 사용가능한 상태가 맞는지 확인할 필요가 있습니다.


이를 위해 getExtgernalStorageState()를 호출하여 반환 값이 MEDIA_MOUNTED 인지 확인해줍니다.



저장소 용량을 확인하기 위해선 현재 file system의 block 개수와 block의 사이즈를 알고 곱해주면 됩니다.


기존에는 StatFs.getBlockSize()와 StatFs.getBlockCount()를 사용했는데, 이는 구글측에서 더이상 사용하지 말고 대신 StatFs.getBlockSizeLong()와 StatFs.getBlockCountLong() 등을 사용하라 권하고 있습니다.



위와 같이 총 용량을 구한 뒤, 용량 단위에 맞게 변환해주어야 합니다.


public String getFileSize(long size) {
if (size <= 0)
return "0";
final String[] units = new String[] { "B", "KB", "MB", "GB", "TB" };
int digitGroups = (int) (Math.log10(size) / Math.log10(1024));
return new DecimalFormat("#,##0.#").format(size / Math.pow(1024, digitGroups)) + " " + units[digitGroups];
}


해당 코드를 사용하여 단위에 알맞게 용량을 보여줄 수 있습니다.




Comments