android - 无法导入 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;
}
解决方案
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();
}
}
推荐阅读
- css - 有没有办法将fa图标添加到css文件中
- php - 插入操作时避免MySql省略+符号
- ios - 如何使用swift在折线图中显示json数据
- php - 使用 php 表单搜索 Interbase(包含一列值的下拉列表)
- jquery - 需要以下值的正则表达式才能在文本框中输入
- cluster-computing - slurm:在日志文件中生成统计作业
- python - Tensorflow 权重在训练前后不会改变
- html - CSS 截断带有 flex-direction 列的 flexbox 父级中的文本
- shell - 文本处理 - 将下一行附加到上一行,直到行以“^”结尾
- node.js - 在 Linux 中从节点应用程序创建单个 exe 文件