我正在尝试找到一种方法来查找手机上安装的 SD 卡的总大小和可用空间,根据我对 SOF 的研究和 Android 开发网站,我能够找到 getExternalStorageDirectory() 方法,但根据安卓API这将返回一个不一定是外部的目录:
“传统上这是一张 SD 卡,但它也可以作为设备中的内置存储实现,与受保护的内部存储不同,并且可以作为文件系统安装在计算机上。”
因此,我从措辞方式得知“外部存储”目录实际上可以是多个物理存储设备(内部和外部存储器)的一部分。根据我的测试,我发现使用此方法返回的大小约为实际 SD 卡大小的 1.5 倍。
所以我的问题是,是否有一种编程方式可以返回 SD 卡上的总大小和可用空间?手机本身可以给我这些信息,所以我觉得应该有办法,但我现在不知所措......任何帮助将不胜感激!
编辑:
这是我目前用于计算总大小的代码
private long TotalSDMemory(){
File path = Environment.getExternalStorageDirectory();
StatFs stat = new StatFs(path.getAbsolutePath());
long blockSize = stat.getBlockSize();
long totalBlocks = stat.getBlockCount();
long totalSpace = totalBlocks * blockSize;
Log.d(TAG,"Size of total SD Memory: "+totalSpace);
Log.d(TAG, "External storage emulated: "+Environment.isExternalStorageEmulated());
return totalSpace;
}
编辑(2):
我不知道这很重要,但我有一台三星 Galaxy S3,我用它来测试代码,显然三星的外部存储器有不同的文件结构。这是一个可以帮助其他人获得正确尺寸的链接:获取三星手机中SD卡的大小
public String[] getSize() throws IOException {
String memory="";
Process p = Runtime.getRuntime().exec("df /mnt/sdcard");
InputStream is =p.getInputStream();
int by=-1;
while((by=is.read())!=-1) {
memory+=new String(new byte[]{(byte)by});
}
for (String df:memory.split("/n")) {
if(df.startsWith("/mnt/sdcard")) {
String[] par = df.split(" ");
List<String> pp=new ArrayList<String>();
for(String pa:par) {
if(!pa.isEmpty()) {
pp.add(pa);
}
}
return pp.toArray(new String[pp.size()]);
}
}
return null;
}
getSize()[0] 是 /mnt/sdcard。 getSize()[1]是sd的大小(例如12.0G),getSize()[2]被使用,[3]是免费的,[4]是blksize
Or:
new File("/sdcard/").getFreeSpace() - bytes of free in long
new File("/sdcard/").getTotalSpace() - size of sd
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)