LISTORY
안드로이드 저장소 용량 확인 방법 본문
안드로이드에서 파일 탐색기와 같은 어플리케이션을 개발중이거나 또는 새로운 파일을 생성하기 위해선 현재 기기의 저장 공간은 어떻게 되는지, 또 사용 가능한 용량은 어느정도 인지 확인할 필요가 있을 경우가 있습니다.
안드로이드에서 현재 기기의 총 저장 용량과 사용 가능한 용량이 어느정도 확인하기 위해서는 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];
}
해당 코드를 사용하여 단위에 알맞게 용량을 보여줄 수 있습니다.
'IT > 안드로이드' 카테고리의 다른 글
안드로이드 스튜디오와 SVN 연동 및 설정 (1) | 2017.08.22 |
---|---|
안드로이드 파일 추가 및 삭제 시, 미디어 스캐닝 (4) | 2017.07.27 |
안드로이드 File 관리. 내부저장소&외부저장소 (0) | 2017.07.08 |
안드로이드 해상도, 화면밀도(dpi), 화면크기, dp? (0) | 2017.06.13 |
안드로이드와 FTP - FTP 서버 연결 코드 (2) | 2017.05.22 |