资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

Android之获取手机内部及sdcard存储空间的方法

知识点:

为广汉等地区用户提供了全套网页设计制作服务,及广汉网站建设行业解决方案。主营业务为网站设计、做网站、广汉网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!

内部存储空间获取总大小和可用大小;

sdcard存储空间获取总大小和可用大小;

新名词记录{StatFs:描述文件系统信息的类}

概览

在开发中,我们或多或少都会用到存储空间进行存储数据。移动设备上可以有两种的存储方式:手机内部空间和sdcard外部空间。对于要使用存储空间,要使用哪一个?如何判断是否有足够的空间?sdcard是否挂载?等等诸多问题就来了。

对于设备内部存储空间来说,是一定会存在的。如果使用内部存储空间,我们需要做的是判断内部存储空间是否有足够大的可用空间给我们使用。现在的移动设备,手机厂商已经将内部存储做得很大很大了,一般来说用户都足够用了。

对于sdcard,这个是用户外部选择性的进行存储空间扩展的,事实上不一定会有sdcard。尤其是在现在Android移动设备厂商提供的内部存储空间越来越大,起步的已经都是32G了,更大的可以去到128G,所以用户可能就不需要再进行sdcard的扩展了。但是,设备内部存储空间小,需要用到外部存储空间的情况还是可能会出现的。而且可以知道主流的APP对于一些非私密的数据,例如图片,歌曲以及下载的更新包等,都会选择放置在sdcard里,以减少占用内部存储空间。

说了这么多,我们还是有必要对上面两种存储空间的使用作一个说明,如何获取存储空间是否可用,可用空间是否足够大等问题。

内部存储空间

我们知道,存储硬件的空间是按着区块来划分的,每个区块有固定的大小。存储设备的总大小=区块大小*区块数量。通过StatFs类,我们可以获取到总的区块,可用区块和每个区块的字节大小等信息。

具体看代码:

/**
   * 获取手机内部空间总大小
   *
   * @return 大小,字节为单位
   */
  static public long getTotalInternalMemorySize() {
    //获取内部存储根目录
    File path = Environment.getDataDirectory();
    //系统的空间描述类
    StatFs stat = new StatFs(path.getPath());
    //每个区块占字节数
    long blockSize = stat.getBlockSize();
    //区块总数
    long totalBlocks = stat.getBlockCount();
    return totalBlocks * blockSize;
  }

  /**
   * 获取手机内部可用空间大小
   *
   * @return 大小,字节为单位
   */
  static public long getAvailableInternalMemorySize() {
    File path = Environment.getDataDirectory();
    StatFs stat = new StatFs(path.getPath());
    long blockSize = stat.getBlockSize();
    //获取可用区块数量
    long availableBlocks = stat.getAvailableBlocks();
    return availableBlocks * blockSize;
  }

用以上两个方法,就可以获得内部存储空间总大小和可用大小了。

sdcard外部存储空间

  /**
   * 判断SD卡是否可用
   *
   * @return true : 可用
false : 不可用 */ public static boolean isSDCardEnable() { return Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState()); } /** * 获取手机外部总空间大小 * * @return 总大小,字节为单位 */ static public long getTotalExternalMemorySize() { if (isSDCardEnable()) { //获取SDCard根目录 File path = Environment.getExternalStorageDirectory(); StatFs stat = new StatFs(path.getPath()); long blockSize = stat.getBlockSize(); long totalBlocks = stat.getBlockCount(); return totalBlocks * blockSize; } else { return -1; } } /** * 获取SD卡剩余空间 * * @return SD卡剩余空间 */ @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2) public static String getFreeSpace() { if (!isSDCardEnable()) return "sdcard unable!"; StatFs stat = new StatFs(getSDCardPath()); long blockSize, availableBlocks; availableBlocks = stat.getAvailableBlocksLong(); blockSize = stat.getBlockSizeLong(); long size = availableBlocks * blockSize / 1024L; return String.valueOf(size); }

统一描述sdcard的信息

/**
   * 获取SD卡信息
   *
   * @return SDCardInfo
   */
  @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2)
  public static String getSDCardInfo() {
    SDCardInfo sd = new SDCardInfo();
    if (!isSDCardEnable()) return "sdcard unable!";
    sd.isExist = true;
    StatFs sf = new StatFs(Environment.getExternalStorageDirectory().getPath());
    sd.totalBlocks = sf.getBlockCountLong();
    sd.blockByteSize = sf.getBlockSizeLong();
    sd.availableBlocks = sf.getAvailableBlocksLong();
    sd.availableBytes = sf.getAvailableBytes();
    sd.freeBlocks = sf.getFreeBlocksLong();
    sd.freeBytes = sf.getFreeBytes();
    sd.totalBytes = sf.getTotalBytes();
    return sd.toString();
  }

  public static class SDCardInfo {
    boolean isExist;
    long totalBlocks;
    long freeBlocks;
    long availableBlocks;
    long blockByteSize;
    long totalBytes;
    long freeBytes;
    long availableBytes;

    @Override
    public String toString() {
      return "isExist=" + isExist +
          "\ntotalBlocks=" + totalBlocks +
          "\nfreeBlocks=" + freeBlocks +
          "\navailableBlocks=" + availableBlocks +
          "\nblockByteSize=" + blockByteSize +
          "\ntotalBytes=" + totalBytes +
          "\nfreeBytes=" + freeBytes +
          "\navailableBytes=" + availableBytes;
    }
  }

总结

以上就是分别获取两个不同的存储空间总大小和可用大小的示例。希望对大家有用。

如有任何问题,请及时与我联系,谢谢!

这篇Android之获取手机内部及sdcard存储空间的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持创新互联。


新闻标题:Android之获取手机内部及sdcard存储空间的方法
转载注明:http://cdkjz.cn/article/jipeji.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220