首页 > 解决方案 > 无法导入 android.os.storage.VolumeInfo 也无法使用 getVolumes() API

问题描述

Android 6.0 及以上版本无法编译以下代码。

无法导入 android.os.storage.VolumeInfo

需要从 getVolumes() API 获取 volumeInfos。

下面是代码。

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        StorageManager sm = ctx.getSystemService(StorageManager.class);
        List<VolumeInfo> volumeInfos = sm.getVolumes();
        for (VolumeInfo vol : volumeInfos) {
            if(vol.type==VolumeInfo.TYPE_PUBLIC
                    && (vol.state==VolumeInfo.STATE_MOUNTED || vol.state==VolumeInfo.STATE_MOUNTED_READ_ONLY)){
                String desc = sm.getBestVolumeDescription(vol);
                boolean isSdCard = desc.toLowerCase().contains("sd");
                list.add(new StorageInfo(vol.path, true, isSdCard, vol.fsUuid, vol.fsLabel, desc, isSdCard?0:usbCounter++));
                    }
             }

        return list;
    } 

标签: androidandroid-6.0-marshmallowvolume

解决方案


VolumeInfo 不再可用,但您可以使用StorageVolume

这是获取有关存储卷的详细信息的一些提示

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            try {
                StorageManager mStorageManager =
                        (StorageManager) getSystemService(Context.STORAGE_SERVICE);

                Class<?> storageVolumeClazz = Class.forName("android.os.storage.StorageVolume");

                if (mStorageManager != null) {
                    Method getVolumeList = mStorageManager.getClass().getMethod("getVolumeList");
                    Method getUuid = storageVolumeClazz.getMethod("getUuid");
                    Method getPath = storageVolumeClazz.getMethod("getPath");
                    Method getIsPrimary = storageVolumeClazz.getMethod("isPrimary");
                    Method getIsRemovable = storageVolumeClazz.getMethod("isRemovable");
                    Object result = getVolumeList.invoke(mStorageManager);

                    //Here you can do with the  more thing you need in the same way

                    if (result != null) {
                        //Iterate All Volumes
                        for (int i = 0; i < Array.getLength(result); i++) {
                            Object anStorageObject = Array.get(result, i);
                            String path = (String) getPath.invoke(anStorageObject);
                            String uuid = (String) getUuid.invoke(anStorageObject);
                            Boolean isPrimary = (Boolean) getIsPrimary.invoke(anStorageObject);
                            Boolean isRemovable = (Boolean) getIsRemovable.invoke(anStorageObject);

                        }
                    }


                }
            } catch (Exception e) {
                e.printStackTrace();

            }
        }

推荐阅读