国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

Android之獲取手機(jī)內(nèi)部及sdcard存儲空間的方法

2019-10-21 21:43:34
字體:
供稿:網(wǎng)友

知識點(diǎn):

內(nèi)部存儲空間獲取總大小和可用大小;

sdcard存儲空間獲取總大小和可用大小;

新名詞記錄{StatFs:描述文件系統(tǒng)信息的類}

概覽

在開發(fā)中,我們或多或少都會用到存儲空間進(jìn)行存儲數(shù)據(jù)。移動(dòng)設(shè)備上可以有兩種的存儲方式:手機(jī)內(nèi)部空間和sdcard外部空間。對于要使用存儲空間,要使用哪一個(gè)?如何判斷是否有足夠的空間?sdcard是否掛載?等等諸多問題就來了。

對于設(shè)備內(nèi)部存儲空間來說,是一定會存在的。如果使用內(nèi)部存儲空間,我們需要做的是判斷內(nèi)部存儲空間是否有足夠大的可用空間給我們使用。現(xiàn)在的移動(dòng)設(shè)備,手機(jī)廠商已經(jīng)將內(nèi)部存儲做得很大很大了,一般來說用戶都足夠用了。

對于sdcard,這個(gè)是用戶外部選擇性的進(jìn)行存儲空間擴(kuò)展的,事實(shí)上不一定會有sdcard。尤其是在現(xiàn)在Android移動(dòng)設(shè)備廠商提供的內(nèi)部存儲空間越來越大,起步的已經(jīng)都是32G了,更大的可以去到128G,所以用戶可能就不需要再進(jìn)行sdcard的擴(kuò)展了。但是,設(shè)備內(nèi)部存儲空間小,需要用到外部存儲空間的情況還是可能會出現(xiàn)的。而且可以知道主流的APP對于一些非私密的數(shù)據(jù),例如圖片,歌曲以及下載的更新包等,都會選擇放置在sdcard里,以減少占用內(nèi)部存儲空間。

說了這么多,我們還是有必要對上面兩種存儲空間的使用作一個(gè)說明,如何獲取存儲空間是否可用,可用空間是否足夠大等問題。

內(nèi)部存儲空間

我們知道,存儲硬件的空間是按著區(qū)塊來劃分的,每個(gè)區(qū)塊有固定的大小。存儲設(shè)備的總大小=區(qū)塊大小*區(qū)塊數(shù)量。通過StatFs類,我們可以獲取到總的區(qū)塊,可用區(qū)塊和每個(gè)區(qū)塊的字節(jié)大小等信息。

具體看代碼:

/**   * 獲取手機(jī)內(nèi)部空間總大小   *   * @return 大小,字節(jié)為單位   */  static public long getTotalInternalMemorySize() {    //獲取內(nèi)部存儲根目錄    File path = Environment.getDataDirectory();    //系統(tǒng)的空間描述類    StatFs stat = new StatFs(path.getPath());    //每個(gè)區(qū)塊占字節(jié)數(shù)    long blockSize = stat.getBlockSize();    //區(qū)塊總數(shù)    long totalBlocks = stat.getBlockCount();    return totalBlocks * blockSize;  }  /**   * 獲取手機(jī)內(nèi)部可用空間大小   *   * @return 大小,字節(jié)為單位   */  static public long getAvailableInternalMemorySize() {    File path = Environment.getDataDirectory();    StatFs stat = new StatFs(path.getPath());    long blockSize = stat.getBlockSize();    //獲取可用區(qū)塊數(shù)量    long availableBlocks = stat.getAvailableBlocks();    return availableBlocks * blockSize;  }

用以上兩個(gè)方法,就可以獲得內(nèi)部存儲空間總大小和可用大小了。

sdcard外部存儲空間

  /**   * 判斷SD卡是否可用   *   * @return true : 可用<br>false : 不可用   */  public static boolean isSDCardEnable() {    return Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState());  }/**   * 獲取手機(jī)外部總空間大小   *   * @return 總大小,字節(jié)為單位   */  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);  }

統(tǒng)一描述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;    }  }

總結(jié)

以上就是分別獲取兩個(gè)不同的存儲空間總大小和可用大小的示例。希望對大家有用。

如有任何問題,請及時(shí)與我聯(lián)系,謝謝!

這篇Android之獲取手機(jī)內(nèi)部及sdcard存儲空間的方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持VEVB武林網(wǎng)。


注:相關(guān)教程知識閱讀請移步到Android開發(fā)頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 福州市| 民勤县| 南召县| 平湖市| 临潭县| 扎兰屯市| 洛川县| 柳河县| 温州市| 泗洪县| 江源县| 甘肃省| 延寿县| 永年县| 德清县| 宾川县| 富民县| 罗平县| 舟山市| 和平县| 莎车县| 日喀则市| 平舆县| 曲沃县| 武鸣县| 边坝县| 根河市| 青浦区| 本溪| 六安市| 乌审旗| 崇阳县| 桃江县| 庆阳市| 大名县| 东至县| 栖霞市| 望谟县| 普定县| 日喀则市| 沿河|