Android media媒体库分析之:分类别统计媒体文件大(2)

再来看第二方法,其实这个方法我们用不到,我们已经通过第一个方法获取到指定文件夹的大小了,那关于某一个文件的大小我们之间通过file可以拿到。
第二个方法有一个封装类:starfs,可以获取rom、sdcard的总大小和可用空间,如下:

/**
    * The size, in bytes, of a block on the file system. This corresponds to
    * the Unix {@code statfs.f_bsize} field.
    */
    public int getBlockSize() {
        return (int) mStat.f_bsize;
    }

/**
    * The total number of blocks on the file system. This corresponds to the
    * Unix {@code statfs.f_blocks} field.
    */
    public int getBlockCount() {
        return (int) mStat.f_blocks;
    }

这个可以直接在我们获取总体容量时使用。

上面把系统是怎么做的大概搞清楚,下面我们来实现我们的需求:

一、思路:
1、Android media媒体库分析之:调用系统媒体库完成指定媒体文件扫描
这篇文章可以知道,媒体文件(音频、视频、图片)系统完成扫描之后就存入了数据库,那我们可以查询数据库,得到所有媒体文件,把这些文件的大小相加。
2、由于sdcard可以会unmount,所以在相加时要根据路径判断此文件是否存在;

3、下面时我实现的工具类,希望对你有用:

package com.linuxidc.jerome;

import java.io.File;
import java.util.ArrayList;

import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.os.Environment;
import android.os.StatFs;
import android.provider.MediaStore;

public class MemoryUtil {
 Context mContext;

public MemoryUtil(Context context) {
  mContext = context;
 }

/**
  * 获得SD卡总大小
  *
  * @return
  */
 public long getSDTotalSize() {
  File path = Environment.getExternalStorageDirectory();
  StatFs stat = new StatFs(path.getPath());
  long blockSize = stat.getBlockSize();
  long totalBlocks = stat.getBlockCount();
  return blockSize * totalBlocks;
 }

/**
  * 获得sd卡剩余容量,即可用大小
  *
  * @return
  */
 public long getSDAvailableSize() {
  File path = Environment.getExternalStorageDirectory();
  StatFs stat = new StatFs(path.getPath());
  long blockSize = stat.getBlockSize();
  long availableBlocks = stat.getAvailableBlocks();
  return blockSize * availableBlocks;
 }

/**
  * 获得机身内存总大小
  *
  * @return
  */
 public long getRomTotalSize() {
  File path = Environment.getDataDirectory();
  StatFs stat = new StatFs(path.getPath());
  long blockSize = stat.getBlockSize();
  long totalBlocks = stat.getBlockCount();
  return blockSize * totalBlocks;
 }

/**
  * 获得机身可用内存
  *
  * @return
  */
 public long getRomAvailableSize() {
  File path = Environment.getDataDirectory();
  StatFs stat = new StatFs(path.getPath());
  long blockSize = stat.getBlockSize();
  long availableBlocks = stat.getAvailableBlocks();
  return blockSize * availableBlocks;
 }

/**
  * 外部存储中所有音频文件所占内存
  *
  * @return
  */
 public long getAudioTotalSize() {
  ArrayList<MemoryInfo> resultList = queryAllMediaList(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI);
  long size = 0L;
  for (MemoryInfo cInfo : resultList) {
   File file = new File(cInfo.getFilePath());
   if(null!=file &&file.exists()){
    size += cInfo.getFileSize();
   }
  }
  return size;
 }

/**
  * 外部存储中除音频、视频、图片之前其他文件所占内存
  *
  * @return
  */
 public long getOtherTotalSize() {
  long size = getSDTotalSize() - getSDAvailableSize()
    - getPictureTotalSize() - getVideoTotalSize()
    - getAudioTotalSize();
  if (size < 0L) {
   size = 0L;
  }
  return size;
 }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/0f062c5a9a7e8d96a8d365d19af0263c.html