-
-
Save toms972/6007571 to your computer and use it in GitHub Desktop.
package com.tom.utils; | |
import android.os.Environment; | |
import android.os.StatFs; | |
/** | |
* Created by Tom on 7/15/13. | |
* Some helper methods for FS queries. | |
*/ | |
public class DiskUtils { | |
private static final long MEGA_BYTE = 1048576; | |
/** | |
* Calculates total space on disk | |
* @param external If true will query external disk, otherwise will query internal disk. | |
* @return Number of mega bytes on disk. | |
*/ | |
public static int totalSpace(boolean external) | |
{ | |
StatFs statFs = getStats(external); | |
long total = (((long) statFs.getBlockCount()) * ((long) statFs.getBlockSize())) / MEGA_BYTE; | |
return (int) total; | |
} | |
/** | |
* Calculates free space on disk | |
* @param external If true will query external disk, otherwise will query internal disk. | |
* @return Number of free mega bytes on disk. | |
*/ | |
public static int freeSpace(boolean external) | |
{ | |
StatFs statFs = getStats(external); | |
long availableBlocks = statFs.getAvailableBlocks(); | |
long blockSize = statFs.getBlockSize(); | |
long freeBytes = availableBlocks * blockSize; | |
return (int) (freeBytes / MEGA_BYTE); | |
} | |
/** | |
* Calculates occupied space on disk | |
* @param external If true will query external disk, otherwise will query internal disk. | |
* @return Number of occupied mega bytes on disk. | |
*/ | |
public static int busySpace(boolean external) | |
{ | |
StatFs statFs = getStats(external); | |
long total = (statFs.getBlockCount() * statFs.getBlockSize()); | |
long free = (statFs.getAvailableBlocks() * statFs.getBlockSize()); | |
return (int) ((total - free) / MEGA_BYTE); | |
} | |
private static StatFs getStats(boolean external){ | |
String path; | |
if (external){ | |
path = Environment.getExternalStorageDirectory().getAbsolutePath(); | |
} | |
else{ | |
path = Environment.getRootDirectory().getAbsolutePath(); | |
} | |
return new StatFs(path); | |
} | |
} |
+1
Being a newb to Android-native with Unity, how is this used? Do we create DiskUtils.java in Plugins? Do we compile it to something?Are there dependencies?
It should really return size in bytes not megabytes...
In Unity:
AndroidJavaObject statFs = new AndroidJavaObject( "android.os.StatFs", Application.persistentDataPath);
long freeBytes = statFs.Call("getAvailableBytes");
Android reference:
https://developer.android.com/reference/android/os/StatFs.html#getAvailableBytes()
@jcowles Thanks for your help. Though, the exact solution is as follow:
long freeBytes = statFs.Call<long>("getAvailableBytes");
;)
Hi. Also newbie. So before calling those code lines you just drop this file in the Plugins
folder inside de project I guess... where exactly?
Here it is using the new 'long' non deprecated APIs
public class DiskUtils {
private static final long MEGA_BYTE = 1048576;
/**
* Calculates total space on disk
* @param external If true will query external disk, otherwise will query internal disk.
* @return Number of mega bytes on disk.
*/
public static int totalSpace(boolean external)
{
StatFs statFs = getStats(external);
long total = (statFs.getBlockCountLong() * statFs.getBlockSizeLong()) / MEGA_BYTE;
return (int) total;
}
/**
* Calculates free space on disk
* @param external If true will query external disk, otherwise will query internal disk.
* @return Number of free mega bytes on disk.
*/
public static int freeSpace(boolean external)
{
StatFs statFs = getStats(external);
long availableBlocks = statFs.getAvailableBlocksLong();
long blockSize = statFs.getBlockSizeLong();
long freeBytes = availableBlocks * blockSize;
return (int) (freeBytes / MEGA_BYTE);
}
/**
* Calculates occupied space on disk
* @param external If true will query external disk, otherwise will query internal disk.
* @return Number of occupied mega bytes on disk.
*/
public static int busySpace(boolean external)
{
StatFs statFs = getStats(external);
long total = (statFs.getBlockCountLong() * statFs.getBlockSizeLong());
long free = (statFs.getAvailableBlocksLong() * statFs.getBlockSizeLong());
return (int) ((total - free) / MEGA_BYTE);
}
private static StatFs getStats(boolean external){
String path;
if (external){
path = Environment.getExternalStorageDirectory().getAbsolutePath();
}
else{
path = Environment.getRootDirectory().getAbsolutePath();
}
return new StatFs(path);
}
}
A solution for the question in this stackoverflow thread: http://stackoverflow.com/questions/7115016/how-to-find-the-amount-of-free-storage-disk-space-left-on-android/17674026#17674026