2015-02-06 46 views
-2

enter image description here我想获得设备的(内部和外部)存储空间的大小。我有以下的类似设备存储: 内部存储, SD卡, 电话存储, enter image description here 我能够获得内部和SD卡存储,但是没能获得手机存储空间。请帮忙。Android每个存储上有多少可用空间

+1

内部存储是手机存储。另外...这甚至不与编程有关。 – 2015-02-06 10:16:26

+0

实际上,手机存储分为两部分:内置和电话存储在我的micromax设备中。 – 2015-02-06 10:17:09

+0

我猜你的手机不支持SD卡...?在这种情况下...可能...您称为“手机存储”的其他存储将被安装为SD卡。 – 2015-02-06 10:20:58

回答

1

请参阅this question,您可以同时获得内部存储空间和SD卡可用空间。

编辑:从链接的问题:

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

要转换为人类可读的格式(MB,GB等)见喜欢的问题。

通常情况下(在中国电话上)内部存储分为两部分,一部分仅用于应用和应用数据,另一部分安装为SD卡,用于照片,媒体等。一个SD卡插槽,您也可以访问。

+0

根据你的链接,它不给我正确的答案,我想知道。 – 2015-02-06 10:37:16

+0

查看我更新的答案。 – JonasCz 2015-02-08 10:13:06

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; 
    } 
相关问题