上一篇有获取外置SD卡路径的方法。获取之后把String型转为path就行了。
代码如下:
MainActivity.java
File file1=new File(getStoragePath(MainActivity.this,true));
//将String转为path
getSd(Environment.getExternalStorageDirectory());
//得到机身容量大小
getSd(file1); //调用getSd()方法得到外置SD卡容量大小
根据路径算出容量大小的方法:
public void getSd(File path) {
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
File aPath = path;
StatFs sf = new StatFs(aPath.getPath());
long size = sf.getBlockSizeLong();
long total = sf.getBlockCountLong();
long available = sf.getAvailableBlocksLong();
DecimalFormat df = new DecimalFormat();
df.setGroupingSize(3);
String totalSize = (size * total) / 1024 >= 1024 ?
df.format((((size * total) / 1024) / 1024)) + "MB" :
df.format((size * total) / 1024) + "KB";
String availableSize = (size * available) / 1024 >= 1024 ?
df.format((((size * available) / 1024) / 1024)) + "MB" :
df.format((size * available) / 1024) + "KB";
String useSize = (size * (total - available)) / 1024 >= 1024 ?
df.format((((size * (total - available)) / 1024) / 1024)) + "MB" :
df.format((size * (total - available)) / 1024) + "KB";
//以下是我创了一个表,把这些在加入表里显示,不需要的直接返回这三个数值就行了。
list.add(totalSize); //总大小
list.add(availableSize); //可用大小
list.add(useSize); //已使用大小
}
}
获取外置SD卡路径的方法:
public static String getStoragePath(Context mContext, boolean is_removale) {
StorageManager mStorageManager = (StorageManager) mContext.getSystemService(Context.STORAGE_SERVICE);
Class<?> storageVolumeClazz = null;
try {
storageVolumeClazz = Class.forName("android.os.storage.StorageVolume");
Method getVolumeList = mStorageManager.getClass().getMethod("getVolumeList");
Method getPath = storageVolumeClazz.getMethod("getPath");
Method isRemovable = storageVolumeClazz.getMethod("isRemovable");
Object result = getVolumeList.invoke(mStorageManager);
final int length = Array.getLength(result);
for (int i = 0; i < length; i++) {
Object storageVolumeElement = Array.get(result, i);
String path = (String) getPath.invoke(storageVolumeElement);
boolean removable = (Boolean) isRemovable.invoke(storageVolumeElement);
if (is_removale == removable) {
return path;
}
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return null;
}