欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2018年08月01日 15:05:19   作者:姚鏡堂  
今天小編就為大家分享一篇Android之獲取手機(jī)內(nèi)部及sdcard存儲(chǔ)空間的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧

知識(shí)點(diǎn):

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

sdcard存儲(chǔ)空間獲取總大小和可用大??;

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

概覽

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

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

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

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

內(nèi)部存儲(chǔ)空間

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

具體看代碼:

/**
   * 獲取手機(jī)內(nèi)部空間總大小
   *
   * @return 大小,字節(jié)為單位
   */
  static public long getTotalInternalMemorySize() {
    //獲取內(nèi)部存儲(chǔ)根目錄
    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)部存儲(chǔ)空間總大小和可用大小了。

sdcard外部存儲(chǔ)空間

  /**
   * 判斷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è)不同的存儲(chǔ)空間總大小和可用大小的示例。希望對(duì)大家有用。

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

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

相關(guān)文章

  • 如何在Android Studio下進(jìn)行NDK開發(fā)

    如何在Android Studio下進(jìn)行NDK開發(fā)

    這篇文章主要介紹了如何在Android Studio下進(jìn)行NDK開發(fā),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • Android Studio 導(dǎo)入新工程項(xiàng)目圖解

    Android Studio 導(dǎo)入新工程項(xiàng)目圖解

    這篇文章主要介紹了Android Studio 導(dǎo)入新工程項(xiàng)目圖解,需要的朋友可以參考下
    2017-12-12
  • Android中使用Toast.cancel()方法優(yōu)化toast內(nèi)容顯示的解決方法

    Android中使用Toast.cancel()方法優(yōu)化toast內(nèi)容顯示的解決方法

    做程序員的,基本一看api就知道,用這個(gè)可以取消上一個(gè)toast的顯示,然后顯示下一個(gè),這樣就能解決出現(xiàn)的問題??墒窃跍y(cè)試的過程中,發(fā)現(xiàn)卻沒有想象中的那么簡單,不信可以百度一下,很多很多人發(fā)現(xiàn)toast的cancel()方法不起作用
    2013-05-05
  • 深入了解ViewPager2的使用

    深入了解ViewPager2的使用

    這篇文章主要介紹了ViewPager2 使用的相關(guān)資料,幫助大家更好的進(jìn)行Android開發(fā),感興趣的朋友可以了解下
    2020-12-12
  • Android仿淘寶物流追蹤的實(shí)例代碼

    Android仿淘寶物流追蹤的實(shí)例代碼

    本篇文章主要介紹了Android仿淘寶物流追蹤的實(shí)例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-06-06
  • Android 圖片特效如何實(shí)現(xiàn)及總結(jié)

    Android 圖片特效如何實(shí)現(xiàn)及總結(jié)

    這篇文章主要介紹了Android 圖形特效如何實(shí)現(xiàn)及總結(jié)的相關(guān)資料,這里對(duì)Android圖像特效的實(shí)現(xiàn)比如:旋轉(zhuǎn),放大,縮小,傾斜等,需要的朋友可以參考下
    2016-12-12
  • Android入門之RelativeLayout、FrameLayout用法分析

    Android入門之RelativeLayout、FrameLayout用法分析

    這篇文章主要介紹了Android入門之RelativeLayout、FrameLayout用法分析,需要的朋友可以參考下
    2014-08-08
  • Android onCreate( )方法詳細(xì)介紹

    Android onCreate( )方法詳細(xì)介紹

    本文主要介紹Android onCreate( )方法,做Android應(yīng)用的朋友對(duì)onCreate()的方法并不陌生,在開發(fā)應(yīng)用的時(shí)候大家應(yīng)該注意什么呢,這里給大家詳細(xì)說明
    2016-09-09
  • Android7.0 工具類:DiffUtil詳解

    Android7.0 工具類:DiffUtil詳解

    這篇文章主要介紹了Android7.0 工具類:DiffUtil的相關(guān)資料,并附實(shí)例代碼,和實(shí)現(xiàn)效果圖,需要的朋友可以參考下
    2016-09-09
  • android多媒體音樂(MediaPlayer)播放器制作代碼

    android多媒體音樂(MediaPlayer)播放器制作代碼

    這篇文章主要為大家詳細(xì)介紹了android多媒體音樂(MediaPlayer)播放器的制作相關(guān)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-02-02

最新評(píng)論