据我所知,在Android上有:
我如何获得每张照片的总数和可用数量,并检查它们是否存在(某些手机没有内置SD卡)
由于
答案 0 :(得分:32)
以下是获取内部存储空间大小的方法:
StatFs statFs = new StatFs(Environment.getRootDirectory().getAbsolutePath());
long blockSize = statFs.getBlockSize();
long totalSize = statFs.getBlockCount()*blockSize;
long availableSize = statFs.getAvailableBlocks()*blockSize;
long freeSize = statFs.getFreeBlocks()*blockSize;
以下是获得外部存储空间大小(SD卡大小)的方法:
StatFs statFs = new StatFs(Environment.getExternalStorageDirectory().getAbsolutePath());
long blockSize = statFs.getBlockSize();
long totalSize = statFs.getBlockCount()*blockSize;
long availableSize = statFs.getAvailableBlocks()*blockSize;
long freeSize = statFs.getFreeBlocks()*blockSize;
简短说明
免费区块:
总块数 在文件系统上免费,包括 保留块(不是 可用于正常应用程序)。
可用块:
免费的块数 文件系统,可用于 应用
以下是检测SD卡是否已安装的方法:
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state))
{
// We can read and write the media
}
else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state))
{
// We can only read the media
}
else
{
// No external media
}
答案 1 :(得分:3)
/*************************************************************************************************
Returns size in MegaBytes.
If you need calculate external memory, change this:
StatFs statFs = new StatFs(Environment.getRootDirectory().getAbsolutePath());
to this:
StatFs statFs = new StatFs(Environment.getExternalStorageDirectory().getAbsolutePath());
**************************************************************************************************/
public int TotalMemory()
{
StatFs statFs = new StatFs(Environment.getRootDirectory().getAbsolutePath());
int Total = (statFs.getBlockCount() * statFs.getBlockSize()) / 1048576;
return Total;
}
public int FreeMemory()
{
StatFs statFs = new StatFs(Environment.getRootDirectory().getAbsolutePath());
int Free = (statFs.getAvailableBlocks() * statFs.getBlockSize()) / 1048576;
return Free;
}
public int BusyMemory()
{
StatFs statFs = new StatFs(Environment.getRootDirectory().getAbsolutePath());
int Total = (statFs.getBlockCount() * statFs.getBlockSize()) / 1048576;
int Free = (statFs.getAvailableBlocks() * statFs.getBlockSize()) / 1048576;
int Busy = Total - Free;
return Busy;
}
答案 2 :(得分:3)
用于内存 Environment.getRootDirectory()。getAbsolutePath()不是正确的方法。
同样适用于大多数设备
Environment.getDataDirectory()有效但又不一致。
对于外部目录方法是对的。要区分内部mnt / sdcard使用
Environment.isExternalStorageRemovable()。
但我仍然想知道如何获得精确的内存。与开源不一致和许多版本一样。
答案 3 :(得分:0)
在大多数手机上,总块数是用户可用的块数(即较少的系统存储量等)。我还没有找到一种能够产生手机总存储量的方法。
答案 4 :(得分:0)
StatFs - 检索有关文件系统空间的整体信息。这是Unix statvfs()的包装器。
从API级别18使用
long getTotalBytes - The total number of bytes supported by the file system.
对于较旧的API使用
int getBlockCount ()
int getBlockSize ()
StatFs stat = new StatFs(**path**);
long bytesAvailable = (long)stat.getBlockSize() *(long)stat.getBlockCount();
这里我们需要为路径变量提供正确的字符串值。 您需要使用路径的字符串值,如下所示: “到/ mnt / external_sd /” “/ MNT / extSdCard /”
您可以检索所有 / mnt / 设备的列表,并使用其中一个值。
File mntDir = new File("/mnt/");
if(mntDir.isDirectory()){
String[] dirList = mntDir.list();...}
或类似
var file=new Java.IO.File("storage/");
var listOfStorages=file.ListFiles();
或
String[] externals = System.getenv("SECONDARY_STORAGE").split(":");