Android获取存储空间大小

在开发Android应用时,有时候我们需要获取设备的存储空间大小,以便在应用中显示并管理存储空间的使用情况。本文将介绍如何使用Android提供的API来获取存储空间大小,并提供相应的代码示例。

存储空间类型

内部存储空间

Android设备通常都会提供一部分用于应用数据存储的内部存储空间,这部分存储空间默认只能被当前应用访问。内部存储空间主要用于存储应用的私有数据,如数据库文件、SharedPreference文件等。

外部存储空间

除了内部存储空间,Android设备还通常会提供一部分用于存储公共数据的外部存储空间,这部分存储空间可以被其他应用或用户访问。外部存储空间主要用于存储一些共享文件,如图片、音乐、文档等。

获取内部存储空间大小

要获取内部存储空间的大小,我们可以使用getFilesDir()方法来获取应用的私有目录,然后使用getTotalSpace()方法来获取目录所在磁盘的总空间大小。

import java.io.File;

public long getInternalStorageSize() {
    File internalStorageDir = getFilesDir();
    return internalStorageDir.getTotalSpace();
}

获取外部存储空间大小

要获取外部存储空间的大小,我们可以使用getExternalFilesDir()方法来获取应用的外部目录,然后使用getTotalSpace()方法来获取目录所在磁盘的总空间大小。

import android.os.Environment;

public long getExternalStorageSize() {
    File externalStorageDir = getExternalFilesDir(null);
    return externalStorageDir.getTotalSpace();
}

需要注意的是,外部存储空间可能不存在或不可用,所以在使用getExternalFilesDir()方法获取外部目录时,需要进行空判断。

import android.os.Environment;

public long getExternalStorageSize() {
    File externalStorageDir = getExternalFilesDir(null);
    if (externalStorageDir != null) {
        return externalStorageDir.getTotalSpace();
    } else {
        return 0;
    }
}

获取存储空间使用情况

除了获取存储空间的总大小,我们还可以获取存储空间的使用情况,包括已使用空间和可用空间。使用getFreeSpace()方法获取可用空间大小,使用getUsableSpace()方法获取已使用空间大小。

import java.io.File;

public long getInternalStorageUsage() {
    File internalStorageDir = getFilesDir();
    return internalStorageDir.getTotalSpace() - internalStorageDir.getFreeSpace();
}

import android.os.Environment;

public long getExternalStorageUsage() {
    File externalStorageDir = getExternalFilesDir(null);
    if (externalStorageDir != null) {
        return externalStorageDir.getTotalSpace() - externalStorageDir.getFreeSpace();
    } else {
        return 0;
    }
}

示例应用

为了更好地理解和演示如何获取存储空间大小,我们可以创建一个简单的示例应用。这个应用将显示内部存储空间和外部存储空间的总大小、已使用空间和可用空间。

import android.os.Bundle;
import android.os.Environment;
import android.widget.TextView;

import androidx.appcompat.app.AppCompatActivity;

import java.io.File;

public class StorageInfoActivity extends AppCompatActivity {

    private TextView tvInternalTotalSize;
    private TextView tvInternalUsage;
    private TextView tvInternalFree;
    private TextView tvExternalTotalSize;
    private TextView tvExternalUsage;
    private TextView tvExternalFree;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_storage_info);

        tvInternalTotalSize = findViewById(R.id.tv_internal_total_size);
        tvInternalUsage = findViewById(R.id.tv_internal_usage);
        tvInternalFree = findViewById(R.id.tv_internal_free);
        tvExternalTotalSize = findViewById(R.id.tv_external_total_size);
        tvExternalUsage = findViewById(R.id.tv_external_usage);
        tvExternalFree = findViewById(R.id.tv_external_free);

        File internalStorageDir = getFilesDir();
        long internalTotalSize = internalStorageDir.getTotalSpace();
        long internalUsage = internalTotalSize - internalStorageDir.getFreeSpace();
        long internalFree = internalStorageDir.getFreeSpace();

        tvInternal