我试图找到一种方法来找到在手机上安装的SD卡的总大小和可用空间,从我的研究SOF和对Android开发者网站,我是能够找到方法getExternalStorageDirectory(),但根据Android的API这个返回目录不一定是外部:
“传统上这是一个SD卡,但作为内置存储在一个装置,该装置从受保护的内部存储不同并且可以被安装为在计算机上一个文件系统它也可以被实现。”
所以我收集从措辞的“外部存储”目录其实是可以分开的多个物理存储设备(内部和外部存储器)的方式。 而从我的测试,这就是我发现作为正在使用该方法返回的尺寸大约是1.5倍我的实际SD卡的大小。
所以我的问题是,是否有要返回的总大小和可用空间,只是在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卡的大小
是的,有一种方式。
StatFs stat = new StatFs(Environment.getExternalStorageDirectory().getPath());
long sdAvailSize = (long)stat.getAvailableBlocks()
* (long)stat.getBlockSize();
//One binary gigabyte equals 1,073,741,824 bytes.
long gigaAvailable = sdAvailSize / 1073741824;
明白了从这里: 我如何检查多少可用空间安装在SD卡上的Android设备了?
关于你对这里获得总规模看问题: 获取Android上所有的总空间和可用空间
编辑:
马塞洛Filho的已经指出,这种方法是在API 18(奇巧)弃用。
谷歌建议使用getAvailableBlocksLong ()
和getBlockCountLong ()
来代替。 这两种方法都将返回一个长值,而不是双。
暗示:
Kikiwa指出, 长期应与这些-现在不赞成使用的数据类型-方法,否则你可能会得到负值,如果文件大小太大。
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 / SD卡。 的getSize()[1]是SD的大小(例如12.0克),的getSize()[2]时,[3]是免费的,[4]的BLKSIZE
要么:
new File("/sdcard/").getFreeSpace() - bytes of free in long
new File("/sdcard/").getTotalSpace() - size of sd