Android có dung lượng bộ nhớ trong / ngoài miễn phí


98

Tôi muốn có kích thước bộ nhớ trống trên bộ nhớ trong / ngoài của thiết bị theo lập trình. Tôi đang sử dụng đoạn mã này:

StatFs stat = new StatFs(Environment.getExternalStorageDirectory().getPath());
long bytesAvailable = (long)stat.getBlockSize() *(long)stat.getBlockCount();
long megAvailable = bytesAvailable / 1048576;
Log.e("","Available MB : "+megAvailable);

File path = Environment.getDataDirectory();
StatFs stat2 = new StatFs(path.getPath());
long blockSize = stat2.getBlockSize();
long availableBlocks = stat2.getAvailableBlocks();
String format =  Formatter.formatFileSize(this, availableBlocks * blockSize);
Log.e("","Format : "+format);

và kết quả mà tôi nhận được là:

11-15 10:27:18.844: E/(25822): Available MB : 7572
11-15 10:27:18.844: E/(25822): Format : 869MB

Vấn đề là tôi muốn lấy bộ nhớ trống của SdCard 1,96GBhiện có. Làm cách nào để sửa mã này để tôi có thể nhận được kích thước miễn phí?


Kể từ cấp độ API 18, họ đã đổi tên phương thức để kết thúc bằng Long. Có thể bạn sẽ cần thêm kiểm tra cấp độ API trước nó
Jayshil Dave

Tất cả Giải pháp tôi đã thử đều không hoạt động, khi tôi định dạng làm bộ nhớ trong ... bạn có thể vui lòng cho tôi biết, làm thế nào để đạt được điều này?
Yogesh Rathi

Câu trả lời:


182

Dưới đây là mã cho mục đích của bạn:

public static boolean externalMemoryAvailable() {
        return android.os.Environment.getExternalStorageState().equals(
                android.os.Environment.MEDIA_MOUNTED);
    }

    public static String getAvailableInternalMemorySize() {
        File path = Environment.getDataDirectory();
        StatFs stat = new StatFs(path.getPath());
        long blockSize = stat.getBlockSizeLong();
        long availableBlocks = stat.getAvailableBlocksLong();
        return formatSize(availableBlocks * blockSize);
    }

    public static String getTotalInternalMemorySize() {
        File path = Environment.getDataDirectory();
        StatFs stat = new StatFs(path.getPath());
        long blockSize = stat.getBlockSizeLong();
        long totalBlocks = stat.getBlockCountLong();
        return formatSize(totalBlocks * blockSize);
    }

    public static String getAvailableExternalMemorySize() {
        if (externalMemoryAvailable()) {
            File path = Environment.getExternalStorageDirectory();
            StatFs stat = new StatFs(path.getPath());
            long blockSize = stat.getBlockSizeLong();
            long availableBlocks = stat.getAvailableBlocksLong();
            return formatSize(availableBlocks * blockSize);
        } else {
            return ERROR;
        }
    }

    public static String getTotalExternalMemorySize() {
        if (externalMemoryAvailable()) {
            File path = Environment.getExternalStorageDirectory();
            StatFs stat = new StatFs(path.getPath());
            long blockSize = stat.getBlockSizeLong();
            long totalBlocks = stat.getBlockCountLong();
            return formatSize(totalBlocks * blockSize);
        } else {
            return ERROR;
        }
    }

    public static String formatSize(long size) {
        String suffix = null;

        if (size >= 1024) {
            suffix = "KB";
            size /= 1024;
            if (size >= 1024) {
                suffix = "MB";
                size /= 1024;
            }
        }

        StringBuilder resultBuffer = new StringBuilder(Long.toString(size));

        int commaOffset = resultBuffer.length() - 3;
        while (commaOffset > 0) {
            resultBuffer.insert(commaOffset, ',');
            commaOffset -= 3;
        }

        if (suffix != null) resultBuffer.append(suffix);
        return resultBuffer.toString();
    }

Nhận kích thước RAM

ActivityManager actManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
MemoryInfo memInfo = new ActivityManager.MemoryInfo();
actManager.getMemoryInfo(memInfo);
long totalMemory = memInfo.totalMem;

2
getBlockSize()getBlockCountkhông được dùng nữa.
Nima G

2
@DineshPrajapati Cảm ơn câu trả lời, tôi có truy vấn, Nếu tôi sử dụng Environment.getRootDirectory () thay vì Environment.getDataDirectory để tính toán Bộ nhớ trong, tôi đang nhận được một số đầu ra .. điều này đề cập đến Bộ nhớ trong bộ nhớ khác ..
AK Joshi

3
@DineshPrajapati .. Đã kiểm tra trên MOTO G2 Nhận sai dữ liệu cho Bộ nhớ ngoài
AK Joshi

1
Sử dụng lâu vào cuối cho các cấp API mới hơn (> 18)
Gun2sh

1
Cảm ơn bạn rất nhiều vì đã chia sẻ kiến thức
Kishan Soni

40

Đây là cách tôi đã làm:

StatFs stat = new StatFs(Environment.getExternalStorageDirectory().getPath());
long bytesAvailable;
if (android.os.Build.VERSION.SDK_INT >= 
    android.os.Build.VERSION_CODES.JELLY_BEAN_MR2) {
    bytesAvailable = stat.getBlockSizeLong() * stat.getAvailableBlocksLong();
}
else {
    bytesAvailable = (long)stat.getBlockSize() * (long)stat.getAvailableBlocks();
}
long megAvailable = bytesAvailable / (1024 * 1024);
Log.e("","Available MB : "+megAvailable);

2
nhưng điều này đã bị hạ thấp :(
abbasalim

@ ArMo372, Các bạn có tìm ra mã thay thế cho cái này không?
SimpleCoder

3
Chỉ cần thay thế getBlockSizegetAvailableBlocksvới getBlockSizeLonggetAvailableBlocksLong.
smg

1
điều này không nhận được không gian có sẵn phù hợp. Điều này nhận được 1141 thay vì 1678 @smg

1
Giải pháp không hoạt động khi tôi làm định dạng như lưu trữ nội bộ ... bạn có thể vui lòng cho tôi, làm thế nào để làm được điều này
Yogesh Rathi

27

Kể từ API 9, bạn có thể làm:

long freeBytesInternal = new File(ctx.getFilesDir().getAbsoluteFile().toString()).getFreeSpace();
long freeBytesExternal = new File(getExternalFilesDir(null).toString()).getFreeSpace();

2
File.getUsableSpace () có lẽ tốt hơn vì bạn có thể không chạy dưới quyền root.
Đánh dấu

File.getUsableSpace()vẻ như một phương pháp dễ sử dụng hơn là sử dụng StatFs. Tại sao tôi sử dụng StatFs@MarkCarter?
StuStirling

1
@ DiscoS2 Bạn sẽ sử dụng StatFs nếu minSdkVersion của bạn nhỏ hơn 9
Đánh dấu

1
Bạn cũng sẽ theo dõi những thay đổi về bộ nhớ như thế nào?
nhà phát triển android

24

Để tải tất cả các thư mục lưu trữ có sẵn (bao gồm cả thẻ SD), trước tiên bạn phải tải các tệp lưu trữ:

File internalStorageFile=getFilesDir();
File[] externalStorageFiles=ContextCompat.getExternalFilesDirs(this,null);

Sau đó, bạn có thể nhận được kích thước có sẵn của từng cái đó.

Có 3 cách để làm điều đó:

API 8 trở xuống:

StatFs stat=new StatFs(file.getPath());
long availableSizeInBytes=stat.getBlockSize()*stat.getAvailableBlocks();

API 9 trở lên:

long availableSizeInBytes=file.getFreeSpace();

API 18 trở lên (không cần thiết nếu cái trước đó ổn):

long availableSizeInBytes=new StatFs(file.getPath()).getAvailableBytes(); 

Để có một chuỗi có định dạng đẹp về những gì bạn có bây giờ, bạn có thể sử dụng:

String formattedResult=android.text.format.Formatter.formatShortFileSize(this,availableSizeInBytes);

hoặc bạn có thể sử dụng điều này trong trường hợp bạn muốn xem số byte chính xác nhưng độc đáo:

NumberFormat.getInstance().format(availableSizeInBytes);

Xin lưu ý rằng tôi nghĩ rằng bộ nhớ trong có thể giống với bộ nhớ ngoài đầu tiên, vì bộ đầu tiên là bộ giả lập.


CHỈNH SỬA: Sử dụng StorageVolume trên Android Q trở lên, tôi nghĩ rằng có thể có được dung lượng trống của mỗi cái, bằng cách sử dụng những thứ như:

    val storageManager = getSystemService(Context.STORAGE_SERVICE) as StorageManager
    val storageVolumes = storageManager.storageVolumes
    AsyncTask.execute {
        for (storageVolume in storageVolumes) {
            val uuid: UUID = storageVolume.uuid?.let { UUID.fromString(it) } ?: StorageManager.UUID_DEFAULT
            val allocatableBytes = storageManager.getAllocatableBytes(uuid)
            Log.d("AppLog", "allocatableBytes:${android.text.format.Formatter.formatShortFileSize(this,allocatableBytes)}")
        }
    }

Tôi không chắc liệu điều này có chính xác hay không và tôi không thể tìm cách lấy tổng kích thước của từng loại, vì vậy tôi đã viết về nó ở đây và hỏi về nó ở đây .


1
Làm cách nào để có dung lượng trống trên thẻ SD di động (hoặc ổ flash USB OTG) trên các thiết bị có API 23? StatFs mới (file.getPath ()). getAvailableBytes () hoặc file.getUsableSpace () cung cấp 972546048 byte bất kể kích thước bộ nhớ thực trên Nexus 5 (Marshmallow 6.0.1).
isabsent

@isabsent Nexus 5 không có khe cắm thẻ SD. Bạn đã kiểm tra nó như thế nào?
nhà phát triển Android

Tôi đã kiểm tra nó bằng ổ flash USB OTG.
isabsent

@isabsent Tôi chưa bao giờ sử dụng nó. Lấy làm tiếc. Nó có hoạt động tốt trên API 22 trở xuống không?
nhà phát triển android

1
@Smeet Bạn có thể dùng thử trên Android 6 trở lên không? Nếu vậy, có thể đó là sự cố như thế này: code.google.com/p/android/issues/detail?id=200326
nhà phát triển android vào

9

@ Android-Droid - bạn đã nhầm khi Environment.getExternalStorageDirectory()chỉ ra bộ nhớ ngoài không nhất thiết phải là thẻ SD, nó cũng có thể là bộ nhớ trong. Xem:

Tìm vị trí thẻ SD bên ngoài


7

Hãy thử đoạn mã đơn giản này

    public static String readableFileSize() {
    long availableSpace = -1L;
    StatFs stat = new StatFs(Environment.getExternalStorageDirectory().getPath());
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR2)
        availableSpace = (long) stat.getBlockSizeLong() * (long) stat.getAvailableBlocksLong();
    else
        availableSpace = (long) stat.getAvailableBlocks() * (long) stat.getBlockSize();

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

Cảm ơn, nhưng tôi gặp java.lang.ArrayIndexOutOfBoundsException: length=5; index=-2147483648lỗi, có vẻ như digitGroupskết quả là -2147483648.
Acuna

Giải pháp không hoạt động khi tôi định dạng làm bộ nhớ trong ... bạn có thể vui lòng cho tôi không, làm thế nào để đạt được điều này
Yogesh Rathi

6

Rất dễ dàng để tìm ra bộ nhớ có sẵn nếu bạn nhận được đường dẫn bộ nhớ trong cũng như bên ngoài. Ngoài ra, đường dẫn bộ nhớ ngoài của điện thoại thực sự rất dễ tìm bằng cách sử dụng

Environment.getExternalStorageDirectory (). GetPath ();

Vì vậy, tôi chỉ đang tập trung vào cách tìm ra đường dẫn của bộ nhớ di động bên ngoài như sdcard di động, USB OTG (không thử nghiệm USB OTG vì tôi không có USB OTG).

Phương pháp dưới đây sẽ cung cấp danh sách tất cả các đường dẫn bộ nhớ di động bên ngoài có thể có.

 /**
     * This method returns the list of removable storage and sdcard paths.
     * I have no USB OTG so can not test it. Is anybody can test it, please let me know
     * if working or not. Assume 0th index will be removable sdcard path if size is
     * greater than 0.
     * @return the list of removable storage paths.
     */
    public static HashSet<String> getExternalPaths()
    {
    final HashSet<String> out = new HashSet<String>();
    String reg = "(?i).*vold.*(vfat|ntfs|exfat|fat32|ext3|ext4).*rw.*";
    String s = "";
    try
    {
        final Process process = new ProcessBuilder().command("mount").redirectErrorStream(true).start();
        process.waitFor();
        final InputStream is = process.getInputStream();
        final byte[] buffer = new byte[1024];
        while (is.read(buffer) != -1)
        {
            s = s + new String(buffer);
        }
        is.close();
    }
    catch (final Exception e)
    {
        e.printStackTrace();
    }

    // parse output
    final String[] lines = s.split("\n");
    for (String line : lines)
    {
        if (!line.toLowerCase(Locale.US).contains("asec"))
        {
            if (line.matches(reg))
            {
                String[] parts = line.split(" ");
                for (String part : parts)
                {
                    if (part.startsWith("/"))
                    {
                        if (!part.toLowerCase(Locale.US).contains("vold"))
                        {
                            out.add(part.replace("/media_rw","").replace("mnt", "storage"));
                        }
                    }
                }
            }
        }
    }
    //Phone's external storage path (Not removal SDCard path)
    String phoneExternalPath = Environment.getExternalStorageDirectory().getPath();

    //Remove it if already exist to filter all the paths of external removable storage devices
    //like removable sdcard, USB OTG etc..
    //When I tested it in ICE Tab(4.4.2), Swipe Tab(4.0.1) with removable sdcard, this method includes
    //phone's external storage path, but when i test it in Moto X Play (6.0) with removable sdcard,
    //this method does not include phone's external storage path. So I am going to remvoe the phone's
    //external storage path to make behavior consistent in all the phone. Ans we already know and it easy
    // to find out the phone's external storage path.
    out.remove(phoneExternalPath);

    return out;
}

Theo tôi nhớ, việc sử dụng các tên không đổi để xử lý đường dẫn có thể không hoạt động trên một số thiết bị, vì một số thiết bị có thể có đường dẫn riêng. Tôi hy vọng đây không phải là trường hợp. +1 cho nỗ lực.
nhà phát triển android

1
@androiddeveloper Cảm ơn bạn đã bỏ phiếu. Tôi cần tất cả hỗ trợ để kiểm tra mã này trong thiết bị của bạn vì tôi không có tất cả các thiết bị nhưng đã kiểm tra trên 4 thiết bị khác nhau và hoạt động tốt. Xin vui lòng nhận xét ở đây là không hoạt động trong bất kỳ di động của cơ thể.
Smeet

Giải pháp không hoạt động khi tôi làm định dạng như lưu trữ nội bộ ... bạn có thể vui lòng cho tôi, làm thế nào để làm được điều này
Yogesh Rathi

4

Bổ sung nhanh chủ đề Bộ nhớ ngoài

Đừng nhầm lẫn với tên phương pháp externalMemoryAvailable()trong câu trả lời của Dinesh Prajapati.

Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())cung cấp cho bạn trạng thái hiện tại của bộ nhớ, nếu phương tiện hiện có và được gắn tại điểm gắn kết của nó với quyền truy cập đọc / ghi. Bạn sẽ nhận được truengay cả trên các thiết bị không có thẻ SD, như Nexus 5. Nhưng đó vẫn là phương pháp 'phải có' trước bất kỳ thao tác nào với bộ nhớ.

Để kiểm tra xem có thẻ SD trên thiết bị của bạn hay không, bạn có thể sử dụng phương pháp ContextCompat.getExternalFilesDirs()

Nó không hiển thị các thiết bị tạm thời, chẳng hạn như ổ đĩa flash USB.

Cũng xin lưu ý rằng ContextCompat.getExternalFilesDirs()trên Android 4.3 trở xuống sẽ luôn chỉ trả lại 1 mục nhập (thẻ SD nếu có sẵn, nếu không là Nội bộ). Bạn có thể đọc thêm về nó ở đây .

  public static boolean isSdCardOnDevice(Context context) {
    File[] storages = ContextCompat.getExternalFilesDirs(context, null);
    if (storages.length > 1 && storages[0] != null && storages[1] != null)
        return true;
    else
        return false;
}

trong trường hợp của tôi là đủ, nhưng đừng quên rằng một số thiết bị Android có thể có 2 thẻ SD, vì vậy nếu bạn cần tất cả chúng - hãy điều chỉnh mã ở trên.


2
@RequiresApi(api = Build.VERSION_CODES.O)
private void showStorageVolumes() {
    StorageStatsManager storageStatsManager = (StorageStatsManager) getSystemService(Context.STORAGE_STATS_SERVICE);
    StorageManager storageManager = (StorageManager) getSystemService(Context.STORAGE_SERVICE);
    if (storageManager == null || storageStatsManager == null) {
        return;
    }
    List<StorageVolume> storageVolumes = storageManager.getStorageVolumes();
    for (StorageVolume storageVolume : storageVolumes) {
        final String uuidStr = storageVolume.getUuid();
        final UUID uuid = uuidStr == null ? StorageManager.UUID_DEFAULT : UUID.fromString(uuidStr);
        try {
            Log.d("AppLog", "storage:" + uuid + " : " + storageVolume.getDescription(this) + " : " + storageVolume.getState());
            Log.d("AppLog", "getFreeBytes:" + Formatter.formatShortFileSize(this, storageStatsManager.getFreeBytes(uuid)));
            Log.d("AppLog", "getTotalBytes:" + Formatter.formatShortFileSize(this, storageStatsManager.getTotalBytes(uuid)));
        } catch (Exception e) {
            // IGNORED
        }
    }
}

Lớp StorageStatsManager đã giới thiệu Android O trở lên có thể cung cấp cho bạn tổng số byte miễn phí trong bộ nhớ ngoài / nội bộ. Để biết chi tiết về mã nguồn, bạn có thể đọc bài viết sau của tôi. bạn có thể sử dụng phản chiếu cho thấp hơn Android O

https://medium.com/cashify-engineering/how-to-get-storage-stats-in-android-o-api-26-4b92eca6805b


2

Đây là cách tôi đã làm ..

tổng bộ nhớ trong

double totalSize = new File(getApplicationContext().getFilesDir().getAbsoluteFile().toString()).getTotalSpace();
double totMb = totalSize / (1024 * 1024);

Kích thước miễn phí nội bộ

 double availableSize = new File(getApplicationContext().getFilesDir().getAbsoluteFile().toString()).getFreeSpace();
    double freeMb = availableSize/ (1024 * 1024);

Bộ nhớ trống bên ngoài và tổng bộ nhớ

 long freeBytesExternal =  new File(getExternalFilesDir(null).toString()).getFreeSpace();
       int free = (int) (freeBytesExternal/ (1024 * 1024));
        long totalSize =  new File(getExternalFilesDir(null).toString()).getTotalSpace();
        int total= (int) (totalSize/ (1024 * 1024));
       String availableMb = free+"Mb out of "+total+"MB";

0

Về menory bên ngoài, có một cách khác:
File external = Environment.getExternalStorageDirectory(); free:external.getFreeSpace(); total:external.getTotalSpace();


0

Sau khi kiểm tra các giải pháp khác, hãy tự viết mã, đây là mã hoàn chỉnh để tìm kiếm

  • Tổng bộ nhớ ngoài
  • Bộ nhớ ngoài miễn phí
  • Bộ nhớ ngoài đã sử dụng
  • Bộ nhớ trong TotaL
  • Bộ nhớ trong đã sử dụng
  • Bộ nhớ trong miễn phí

'' ''

object DeviceMemoryUtil {
private const val error: String = "Something went wrog"
private const val noExternalMemoryDetected = "No external Storage detected"
private var totalExternalMemory: Long = 0
private var freeExternalMemory: Long = 0
private var totalInternalStorage: Long = 0
private var freeInternalStorage: Long = 0

/**
 * Checks weather external memory is available or not
 */
private fun externalMemoryAvailable(): Boolean {
    return Environment.getExternalStorageState() ==
            Environment.MEDIA_MOUNTED
}

/**
 *Gives total external memory
 * @return String Size of external memory
 * @return Boolean True if memory size is returned
 */
fun getTotalExternalMemorySize(): Pair<String?, Boolean> {
    val dirs: Array<File> = ContextCompat.getExternalFilesDirs(CanonApplication.getCanonAppInstance(), null)
    return if (externalMemoryAvailable()) {
        if (dirs.size > 1) {
            val stat = StatFs(dirs[1].path)
            val blockSize = stat.blockSizeLong
            val totalBlocks = stat.blockCountLong
            var totalExternalSize = totalBlocks * blockSize
            totalExternalMemory = totalExternalSize
            Pair(formatSize(totalExternalSize), true)
        } else {
            Pair(error, false)
        }
    } else {
        Pair(noExternalMemoryDetected, false)
    }
}

/**
 * Gives free external memory size
 * @return String Size of free external memory
 * @return Boolean True if memory size is returned
 */
fun getAvailableExternalMemorySize(): Pair<String?, Boolean> {
    val dirs: Array<File> = ContextCompat.getExternalFilesDirs(CanonApplication.getCanonAppInstance(), null)
    if (externalMemoryAvailable()) {
        return if (dirs.size > 1) {
            val stat = StatFs(dirs[1].path)
            val blockSize = stat.blockSizeLong
            val availableBlocks = stat.availableBlocksLong
            var freeExternalSize = blockSize * availableBlocks
            freeExternalMemory = freeExternalSize
            Pair(formatSize(freeExternalSize), true)
        } else {
            Pair(error, false)
        }
    } else {
        return Pair(noExternalMemoryDetected, false)
    }
}

/**
 * Gives used external memory size
 *  @return String Size of used external memory
 * @return Boolean True if memory size is returned
 */
fun getUsedExternalMemorySize(): Pair<String?, Boolean> {
    return if (externalMemoryAvailable()) {
        val totalExternalSize = getTotalExternalMemorySize()
        val freeExternalSize = getAvailableExternalMemorySize()
        if (totalExternalSize.second && freeExternalSize.second) {
            var usedExternalVolume = totalExternalMemory - freeExternalMemory
            Pair(formatSize(usedExternalVolume), true)
        } else {
            Pair(error, false)
        }
    } else {
        Pair(noExternalMemoryDetected, false)
    }
}

/**
 *Formats the long to size of memory in gb,mb etc.
 * @param size Size of memory
 */
fun formatSize(size: Long): String? {
    return android.text.format.Formatter.formatFileSize(CanonApplication.getCanonAppInstance(), size)
}

/**
 * Gives total internal memory size
 *  @return String Size of total internal memory
 * @return Boolean True if memory size is returned
 */
fun getTotalInternalStorage(): Pair<String?, Boolean> {
    if (showStorageVolumes()) {
        return Pair(formatSize(totalInternalStorage), true)
    } else {
        return Pair(error, false)
    }

}

/**
 * Gives free or available internal memory size
 *  @return String Size of free internal memory
 * @return Boolean True if memory size is returned
 */
fun getFreeInternalStorageVolume(): Pair<String?, Boolean> {
    return if (showStorageVolumes()) {
        Pair(formatSize(freeInternalStorage), true)
    } else {
        Pair(error, false)
    }
}

/**
 *For calculation of internal storage
 */
private fun showStorageVolumes(): Boolean {
    val storageManager = CanonApplication.canonApplicationInstance.applicationContext.getSystemService(Context.STORAGE_SERVICE) as StorageManager
    val storageStatsManager = CanonApplication.canonApplicationInstance.applicationContext.getSystemService(Context.STORAGE_STATS_SERVICE) as StorageStatsManager
    if (storageManager == null || storageStatsManager == null) {
        return false
    }
    val storageVolumes: List<StorageVolume> = storageManager.storageVolumes
    for (storageVolume in storageVolumes) {
        var uuidStr: String? = null
        storageVolume.uuid?.let {
            uuidStr = it
        }
        val uuid: UUID = if (uuidStr == null) StorageManager.UUID_DEFAULT else UUID.fromString(uuidStr)
        return try {
            freeInternalStorage = storageStatsManager.getFreeBytes(uuid)
            totalInternalStorage = storageStatsManager.getTotalBytes(uuid)
            true
        } catch (e: Exception) {
            // IGNORED
            false
        }
    }
    return false
}

fun getTotalInternalExternalMemory(): Pair<Long?, Boolean> {
    if (externalMemoryAvailable()) {
        if (getTotalExternalMemorySize().second) {
            if (getTotalInternalStorage().second) {
                return Pair(totalExternalMemory + totalInternalStorage, true)
            } else {
                return Pair(0, false)
            }
        }
        return Pair(0, false)
    } else {
        if (getTotalInternalStorage().second) {
            return Pair(totalInternalStorage, true)
        } else {
            return Pair(0, false)
        }
    }

}

fun getTotalFreeStorage(): Pair<Long,Boolean> {
    if (externalMemoryAvailable()){
        if(getFreeInternalStorageVolume().second){
            getFreeInternalStorageVolume()
            getAvailableExternalMemorySize()
                return Pair(freeExternalMemory + freeInternalStorage,true)
        }
        else{
            return Pair(0,false)
        }
    }
    else {
        if (getFreeInternalStorageVolume().second){
            getFreeInternalStorageVolume()
            return Pair(freeInternalStorage,true)
        }
      else{
            return Pair(0,false)
        }
    }

}}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.