Android设备路径及容量的读取

1.android设备上的所有外接设备路径总结:

/**
     * USB外接设备挂载路径
     */
    public static final String USB_STORAGE = "/mnt/usb_storage";

    /**
     * 外置内存卡路径
     */
    public static final String EXTERNAL_SD = "/mnt/external_sd";

    /**
     * 内置内存卡路径
     */
    public static final String INTERNAL_SD = Environment.getExternalStorageDirectory().getAbsolutePath();

或者可以采用代码读取方法获取所有存储设备的路径,读取方法为:
List<String> pathsList = new ArrayList<String>();
        
        StorageManager storageManager = (StorageManager) cxt.getSystemService(Context.STORAGE_SERVICE);
        try
        {
            Method method = StorageManager.class.getDeclaredMethod("getVolumePaths");
            method.setAccessible(true);
            Object result = method.invoke(storageManager);
            if (result != null && result instanceof String[])
            {
                String[] pathes = (String[]) result;
                StatFs statFs;
                for (String path : pathes)
                {
                    if (!TextUtils.isEmpty(path) && new File(path).exists())
                    {
                        statFs = new StatFs(path);
                        if (statFs.getBlockCount() * statFs.getBlockSize() != 0)
                        {
                            pathsList.add(path);
                        }
                    }
                }
            }
        }
        catch (Exception e)
        {
            e.printStackTrace();
            File externalFolder = Environment.getExternalStorageDirectory();
            if (externalFolder != null)
            {
                pathsList.add(externalFolder.getAbsolutePath());
            }
        }
        // }
        return pathsList.toArray(new String[pathsList.size()]);

2.容量获取方法

long availableSize = FileUtils.getAvailableSize(path);
        long usedSize,totalSize;
        if (path.startsWith(AppContants.USB_STORAGE))
        {
            usedSize = MeasurementUtils.measureDirectory(path);
            totalSize = availableSize + usedSize;
        }
        else
        {
            totalSize = FileUtils.getTotalSize(path);
            usedSize = totalSize - availableSize;
        }
其中,MeasurementUtils工具类为从android源码中的com.android.defcontainer包下获得的,如欲使用,
请从相应的包下获得并原样复制包名和类到你的应用下;
FileUtils工具类的方法为:
/**
     * 获取指定目录总空间
     * 
     * @param path
     * @return
     */
    @SuppressWarnings("deprecation")
    public static long getTotalSize(String path)
    {
        StatFs stat = new StatFs(path);
        long blockSize, totalBlocks;
        // 判断手机Android版本
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2)
        {
            blockSize = stat.getBlockSizeLong();
            totalBlocks = stat.getBlockCountLong();
            // availableBlocks = stat.getAvailableBlocksLong();
        }
        else
        {
            blockSize = stat.getBlockSize();
            totalBlocks = stat.getBlockCount();
            // availableBlocks = stat.getAvailableBlocks();
        }

        long totalSize = totalBlocks * blockSize;

        return totalSize;
    }

/**
     * 计算指定目录可用空间
     * 
     * @param path
     * @return
     */
    @SuppressWarnings("deprecation")
    public static long getAvailableSize(String path)
    {
        StatFs stat = new StatFs(path);
        long blockSize, availableBlocks;
        // 判断手机Android版本
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2)
        {
            blockSize = stat.getBlockSizeLong();
            // totalBlocks = stat.getBlockCountLong();
            availableBlocks = stat.getAvailableBlocksLong();
        }
        else
        {
            blockSize = stat.getBlockSize();
            // totalBlocks = stat.getBlockCount();
            availableBlocks = stat.getAvailableBlocks();
        }

        // long totalSize = totalBlocks * blockSize;
        long availSize = availableBlocks * blockSize;

        return availSize;
    }


转载于:https://my.oschina.net/Gxhpro/blog/419044

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值