【问题标题】:why am I getting incorrect phone and SDcard memory information?为什么我收到不正确的手机和 SD 卡内存信息?
【发布时间】:2014-12-26 21:44:47
【问题描述】:

我想从手机设置(例如 SDCART 和手机内存)中查看正确的信息。但看到这个代码卡 1800 MB 总内存。我的卡是 16GB。想不通。我尝试了很多代码,但没有。我该如何解决这个问题。

公共静态布尔 externalMemoryAvailable() { 返回 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.getBlockSize();
    long availableBlocks = stat.getAvailableBlocks();
    return formatSize(availableBlocks * blockSize);
}

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

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

public static String getTotalExternalMemorySize() {
    if (externalMemoryAvailable()) {
       /* File path = Environment.getExternalStorageDirectory();
        StatFs stat = new StatFs(path.getAbsolutePath());
        long blockSize = stat.getBlockSize();
        long totalBlocks = stat.getBlockCount();
        return formatSize(totalBlocks * blockSize);

*/ StatFs stat = new StatFs(Environment.getExternalStorageDirectory().getPath()); long bytesAvailable = (long) stat.getBlockSize() * (long) stat.getAvailableBlocks(); long megAvailable = bytesAvailable / (1024 * 1024); return formatSize((long) stat.getBlockSize() * (long) stat.getAvailableBlocks());

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

【问题讨论】:

    标签: android android-sdcard


    【解决方案1】:

    来自Environment#getExternalStorageDirectory()

    注意:不要被这里的“外部”一词所迷惑。最好将此目录视为媒体/共享存储。它是一个文件系统,可以保存相对大量的数据,并且在所有应用程序之间共享(不强制执行权限)。传统上这是一张 SD 卡,但它也可以作为设备中的内置存储实现,不同于受保护的内部存储,并且可以作为文件系统安装在计算机上。

    有两个内部存储器。一种用于应用程序和系统,另一种用于数据。用于数据的那个就像第一张 SD 卡。 (这是一个很笨的版本,请见谅。)这也是你调用getExternalStorageDirectory()方法得到的。

    来自同一来源

    在具有多个“外部”存储目录的设备中,该目录代表用户将与之交互的“主要”外部存储。可通过

    访问二级存储

    我不是在开玩笑,这句话到此结束。我找到了另一个answer,它可以帮助您列出可用的“SD 卡”或外部存储。把它拆开并使用你需要的东西。我认为它看起来像这样:

    String externals = System.getenv("SECONDARY_STORAGE");
    String[] externalsArray = externals.split(":");
    String secondaryExternal = externalsArray[0];
    File path = new File(secondaryExternal);
    

    请注意,我没有测试上述内容。

    【讨论】:

      猜你喜欢
      • 2023-04-10
      • 2012-11-04
      • 1970-01-01
      • 2020-11-24
      • 2011-06-08
      • 1970-01-01
      • 2012-04-06
      • 2015-06-15
      • 2014-03-13
      相关资源
      最近更新 更多