Android ücretsiz boyutta dahili / harici bellek alır


98

Cihazımın dahili / harici depolamasındaki boş bellek boyutunu programlı olarak almak istiyorum. Bu kod parçasını kullanıyorum:

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);

ve aldığım sonuç:

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

Sorun şu ki, 1,96GBşu anda olan SdCard'ın boş belleğini almak istiyorum . Ücretsiz boyutu alabilmek için bu kodu nasıl düzeltebilirim?


API seviyesi 18'den itibaren, yöntemi Long ile bitecek şekilde yeniden adlandırdılar. Muhtemelen ondan önce bir API seviyesi kontrolü eklemeniz gerekir
Jayshil Dave

Tüm Çözüm Kimsede çalışmamaya çalıştım, dahili depolama olarak biçimlendirdiğimde ... beni memnun edebilir misin, bunu nasıl başarabilirim?
Yogesh Rathi

Yanıtlar:


182

Amacınız için kod aşağıdadır:

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();
    }

RAM Boyutunu Alın

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

2
getBlockSize()ve getBlockCountkullanımdan kaldırıldı.
Nima G

2
@DineshPrajapati Cevabınız için teşekkürler, Sorgum var, Dahili Depolamayı hesaplamak için Environment.getDataDirectory yerine Environment.getRootDirectory () kullanırsam, bir çıktı alıyorum .. bu Dahili Bellek diğer belleği ifade eder ..
AK Joshi

3
@DineshPrajapati .. MOTO G2 üzerinde test Harici Depolama için yanlış veri alma
AK Joshi

1
Birkaç API kullanımdan kaldırılmış olabilir, bunu developer.android.com
Dinesh Prajapati

1
Daha yeni API seviyeleri (> 18) için sonunda Uzun kullanın
Gun2sh

40

Ben böyle yaptı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);

3
ancak bu reddedildi :(
abbasalim

@ ArMo372, Siz bunun için yedek kodu buldunuz mu?
SimpleCoder

3
Sadece yerini getBlockSizeve getAvailableBlocksile getBlockSizeLongve getAvailableBlocksLong.
smg

1
bu doğru kullanılabilir alan elde etmiyor. Bu, 1678 @smg yerine 1141 alıyor

1
Dahili depolama olarak biçimlendirdiğimde çözüm çalışmıyor ... beni memnun edebilir misiniz, bunu nasıl başarabilirim
Yogesh Rathi

27

API 9'dan beri şunları yapabilirsiniz:

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

2
File.getUsableSpace () muhtemelen daha iyidir çünkü muhtemelen root olarak çalıştırmıyorsunuz.
Mark

File.getUsableSpace()Bakışlar daha kolay bir yöntem kullanmak yerine kullanmak ister StatFs. Neden StatFs@MarkCarter kullanmalıyım ?
StuStirling

1
@ DiscoS2 sizin minSdkVersion'ın az 9. olup olmadığını statfs kullanırsınız
Mark

1
Depolama değişikliklerini nasıl izlersiniz?
android geliştiricisi

24

Mevcut tüm depolama klasörlerini (SD kartlar dahil) almak için, önce depolama dosyalarını alırsınız:

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

Daha sonra bunların her birinin mevcut boyutunu elde edebilirsiniz.

Bunu yapmanın 3 yolu vardır:

API 8 ve altı:

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

API 9 ve üzeri:

long availableSizeInBytes=file.getFreeSpace();

API 18 ve üstü (bir önceki uygunsa gerekli değildir):

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

Şimdi sahip olduğunuz güzel biçimlendirilmiş dizeyi elde etmek için şunları kullanabilirsiniz:

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

veya tam bayt sayısını görmek isterseniz bunu kullanabilirsiniz, ancak güzel bir şekilde:

NumberFormat.getInstance().format(availableSizeInBytes);

Birincisi taklit edilen olduğu için dahili depolamanın ilk harici depolama ile aynı olabileceğini düşündüğümü unutmayın.


DÜZENLEME: Android Q ve sonraki sürümlerde StorageVolume kullanarak, aşağıdaki gibi bir şey kullanarak her birinin boş alanını elde etmenin mümkün olduğunu düşünüyorum:

    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)}")
        }
    }

Bunun doğru olduğundan emin eğer değilim, ve ben bu konuda yazdığı bu yüzden, her toplam boyutunu almak için bir yol bulamıyorum burada , ve bu konuda sorulan burada .


1
API 23 bulunan cihazlarda çıkarılabilir SD kartta (veya USB OTG flash sürücüde) boş alan nasıl kazanılır? yeni StatF'ler (file.getPath ()). getAvailableBytes () veya file.getUsableSpace (), Nexus 5'te (Marshmallow 6.0.1) gerçek depolama boyutundan bağımsız olarak 972546048 bayt verir.
isabsent

@isabsent Nexus 5'te SD kart yuvası yok. Nasıl kontrol ettin?
android geliştiricisi

USB OTG flash sürücü ile kontrol ettim.
isabetsiz

@isabsent Ben hiç kullanmadım. Afedersiniz. API 22 ve altı üzerinde iyi çalışıyor mu?
android geliştiricisi

1
@Smeet Android 6 veya üzeri sürümlerde denemeniz mümkün mü? Öyleyse, bunun gibi bir sorun olabilir: code.google.com/p/android/issues/detail?id=200326
android geliştiricisi

9

@ Android-Droid - Environment.getExternalStorageDirectory()SD kart olması gerekmeyen harici depolamaya yanlış noktalarsınız, ayrıca dahili belleğe de bağlanabilir. Görmek:

Harici bir SD kart konumu bulun


7

Bu basit parçacığı deneyin

    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];
}

Teşekkürler, ama java.lang.ArrayIndexOutOfBoundsException: length=5; index=-2147483648hata aldım , digitGroupssonuç -2147483648 gibi görünüyor .
Acuna

Dahili depolama olarak biçimlendirdiğimde çözüm çalışmıyor ... beni memnun eder misiniz, bunu nasıl başarabilirim
Yogesh Rathi

6

Hem dahili hem de harici depolama yolu alırsanız, mevcut depolamayı bulmak çok kolaydır. Ayrıca telefonun harici depolama yolunu kullanarak öğrenmek gerçekten çok kolay

Environment.getExternalStorageDirectory (). GetPath ();

Bu yüzden, çıkarılabilir sd kart, USB OTG (USB OTG'ye sahip olmadığım için USB OTG test edilmedi) gibi harici çıkarılabilir depolama yollarının nasıl bulunacağına odaklanıyorum.

Aşağıdaki yöntem, tüm olası harici çıkarılabilir depolama yollarının bir listesini verecektir.

 /**
     * 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;
}

Hatırladığım gibi, yolların işlenmesi için sabit adlar kullanmak bazı cihazlarda çalışmayabilir, çünkü bazılarının kendi yolları olabilir. Umarım durum bu değildir. Çaba için +1.
android geliştiricisi

1
@androiddeveloper Oy verdiğiniz için teşekkürler canım. Bu kodu cihazınızda test etmek için herkesin desteğine ihtiyacım var çünkü tüm cihazlara sahip değilim, ancak 4 farklı cihazda test edilmiş ve iyi çalışıyor. Lütfen buraya yorum yapın, herhangi bir vücudun cep telefonunda çalışmıyor.
Smeet

Dahili depolama olarak biçimlendirdiğimde çözüm çalışmıyor ... beni memnun edebilir misiniz, bunu nasıl başarabilirim
Yogesh Rathi

4

Harici bellek konusuna hızlı ekleme

externalMemoryAvailable()Dinesh Prajapati'nin cevabındaki yöntem adıyla karıştırılmayın .

Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())Medya mevcutsa ve okuma / yazma erişimi olan bağlama noktasında takılıysa, size belleğin mevcut durumunu verir. trueNexus 5 gibi SD kartı olmayan cihazlarda bile kullanacaksınız . Ancak yine de depolama ile herhangi bir işlemden önce 'sahip olunması gereken' bir yöntemdir.

Cihazınızda bir SD kart olup olmadığını kontrol etmek için yöntemi kullanabilirsiniz. ContextCompat.getExternalFilesDirs()

USB flash sürücüler gibi geçici cihazları göstermez.

Ayrıca ContextCompat.getExternalFilesDirs(), Android 4.3 ve önceki sürümlerde her zaman yalnızca 1 giriş (varsa SD kart, aksi takdirde Dahili) döndüreceğini unutmayın. Bu konuda daha fazla bilgi bulabilirsiniz burada .

  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;
}

benim durumumda yeterliydi, ancak bazı Android cihazların 2 SD karta sahip olabileceğini unutmayın, bu nedenle hepsine ihtiyacınız varsa - yukarıdaki kodu ayarlayı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
        }
    }
}

StorageStatsManager sınıfı, harici / dahili depolamada size ücretsiz ve toplam bayt verebilen Android O ve üstünü tanıttı. Kaynak kodu ile ilgili ayrıntılı bilgi için aşağıdaki makalemi okuyabilirsiniz. yansımayı Android O'dan daha düşük

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


2

Ben böyle yaptım ..

dahili Toplam bellek

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

Dahili boş boyut

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

Harici boş ve toplam bellek

 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

Dış rehber hakkında başka bir yol var:
File external = Environment.getExternalStorageDirectory(); free:external.getFreeSpace(); total:external.getTotalSpace();


0

Farklı çözüm yazım kodunu kendim kontrol ettikten sonra bu, bulmak için eksiksiz bir koddur

  • Toplam Harici Bellek
  • Boş Harici Bellek
  • Kullanılan Harici Bellek
  • TotaL Dahili Bellek
  • Kullanılan Dahili Bellek
  • Boş Dahili Bellek

'' ''

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)
        }
    }

}}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.