2015-02-06 6 views
-2

enter image description here Я хочу получить бесплатный размер (внутреннего и внешнего) моего устройства. У меня есть следующее хранилище на устройстве, например: Внутреннее хранилище, SD-карта, Телефон Хранение, enter image description here Я могу получить внутреннюю и SD-карту памяти, но не могу получить Хранение телефона. Пожалуйста помоги.Android сколько свободного места на каждом хранилище

+1

Внутреннее хранилище - это хранилище для телефона. Также ... это даже не связано с программированием. –

+0

На самом деле, телефонное хранилище разделено на две части: внутреннее и телефонное хранилище в моем устройстве с микромахом. –

+0

Я предполагаю, что ваш телефон не поддерживает SD-карты ...? В этом случае ... возможно ... другое хранилище, которое вы называете «хранилищем для телефона», будет установлено как SD-карта. –

ответ

1

См. this question, вы можете получить как свободное пространство для хранения, так и свободное место на SD-карте.

EDIT: от связанного вопроса:

public long freeMemory() { 
    StatFs statFs = new StatFs(Environment.getDataDirectory().getAbsolutePath()); 
    long free = (statFs.getAvailableBlocks() * statFs.getBlockSize()); 
    return free; 
} 

Чтобы преобразовать в удобочитаемый формат (МБ, ГБ и т.д.) См понравившегося вопроса.

Обычно (на китайских телефонах) внутреннее хранилище разделено на две части: одна для приложений и данных приложения, а другая - как SD-карта, для фотографий, мультимедиа и т. Д. Некоторые телефоны также имеют слот для SD-карты, к которому вы также можете получить доступ.

+0

по вашей ссылке, это не дает мне правильный ответ, который я хочу знать. –

+0

См. Мой обновленный ответ. – JonasCz

0
public static long getAvailableStorage() { 
     File path = StorageUtils.getCacheDirectory(ApplicationController.getInstance(), true); 
     long blockSize = 0; 
     long availableBlocks = 0; 
     StatFs stat = new StatFs(path.getPath()); 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) { 
      blockSize = stat.getBlockSizeLong(); 
      availableBlocks = stat.getAvailableBlocksLong(); 
     } else { 
      blockSize = stat.getBlockSize(); 
      availableBlocks = stat.getAvailableBlocks(); 
     } 
     return availableBlocks * blockSize; 
    } 

public static File getCacheDirectory(Context context, 
     boolean preferExternal) { 
    File appCacheDir = null; 
    String externalStorageState; 
    try { 
     externalStorageState = Environment.getExternalStorageState(); 
    } catch (NullPointerException e) { // (sh)it happens (Issue #660) 
     externalStorageState = ""; 
    } 
    if (preferExternal && MEDIA_MOUNTED.equals(externalStorageState) 
     && hasExternalStoragePermission(context)) { 
     appCacheDir = getExternalCacheDir(context); 
    } 
    if (appCacheDir == null) { 
     appCacheDir = context.getCacheDir(); 
    } 
    if (appCacheDir == null) { 
     String cacheDirPath = "/data/data/" + context.getPackageName() 
      + "/"+DOWNLOAD_SUB_DIRECTORY+"/"; 

     appCacheDir = new File(cacheDirPath); 
    } 
    return appCacheDir; 
    } 

private static File getExternalCacheDir(Context context) { 
    File dataDir = new File(new File(
     Environment.getExternalStorageDirectory(), "Android"), "data"); 
    File appCacheDir = new File(
     new File(dataDir, context.getPackageName()), DOWNLOAD_SUB_DIRECTORY); 
    if (!appCacheDir.exists()) { 
     if (!appCacheDir.mkdirs()) { 
     L.w("Unable to create external cache directory"); 
     return null; 
     } 
     try { 
     new File(appCacheDir, ".nomedia").createNewFile(); 
     } catch (IOException e) { 

     } 
    } 
    return appCacheDir; 
    }