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”);
Method getState = storageVolumeClazz.getMethod(“getState”);
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);
String state = (String) getState.invoke(storageVolumeElement);
if (removable && state.equals(Environment.MEDIA_MOUNTED)) {
isMounted =removable ;
break;
}
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return isMounted;
}
获取手机内部剩余存储空间
/**
-
获取手机内部剩余存储空间
-
@return
*/
public static long getAvailableInternalMemorySize() {
File path = Environment.getDataDirectory();
StatFs stat = new StatFs(path.getPath());
long blockSize = stat.getBlockSize();
long availableBlocks = stat.getAvailableBlocks();
return availableBlocks * blockSize;
}
获取手机内部总的存储空间
/**
-
获取手机内部总的存储空间
-
@return
*/
public static long getTotalInternalMemorySize() {
File path = Environment.getDataDirectory();
StatFs stat = new StatFs(path.getPath());
long blockSize = stat.getBlockSize();
long totalBlocks = stat.getBlockCount();
return totalBlocks * blockSize;
}
获取SDCARD剩余存储空间
/**
-
获取SDCARD剩余存储空间
-
@return
*/
public static long getAvailableExternalMemorySize() {
if (externalMemoryAvailable()) {
// File path = Environment.getExternalStorageDirectory();
// StatFs stat = new StatFs(path.getPath());
StatFs stat = new StatFs(getStoragePath(context,true));//path.getPath()
long blockSize = stat.getBlockSize();
long availableBlocks = stat.getAvailableBlocks();
return availableBlocks * blockSize;
} else {
return ERROR;
}
}
获取SDCARD总的存储空间
/**
-
获取SDCARD总的存储空间
-
@return
*/
public static long getTotalExternalMemorySize() {
if (externalMemoryAvailable()) {
// File path = Environment.getExternalStorageDirectory();
// StatFs stat = new StatFs(path.getPath());
StatFs stat = new StatFs(getStoragePath(context,true));//path.getPath()
long blockSize = stat.getBlockSize();
long totalBlocks = stat.getBlockCount();
return totalBlocks * blockSize;
} else {
return ERROR;
}
}
获取系统总内存
/**
-
获取系统总内存
-
@param context 可传入应用程序上下文。
-
@return 总内存大单位为B。
*/
public static long getTotalMemorySize(Context context) {
String dir = “/proc/meminfo”;
try {
FileReader fr = new FileReader(dir);
BufferedReader br = new BufferedReader(fr, 2048);
String memoryLine = br.readLine();
String subMemoryLine = memoryLine.substring(memoryLine.indexOf(“MemTotal:”));
br.close();
return Integer.parseInt(subMemoryLine.replaceAll(“\D+”, “”)) * 1024l;
} catch (IOException e) {
e.printStackTrace();
}
return 0;
}
获取当前可用内存
/**
-
获取当前可用内存,返回数据以字节为单位。
-
@param context 可传入应用程序上下文。
-
@return 当前可用内存单位为B。
*/
public static long getAvailableMemory(Context context) {
ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
ActivityManager.MemoryInfo memoryInfo = new ActivityManager.MemoryInfo();
am.getMemoryInfo(memoryInfo);
return memoryInfo.availMem;
}
private static DecimalFormat fileIntegerFormat = new DecimalFormat(“#0”);
private static DecimalFormat fileDecimalFormat = new DecimalFormat(“#0.#”);
单位换算
/**
-
单位换算
-
@param size 单位为B
-
@param isInteger 是否返回取整的单位
-
@return 转换后的单位
*/
public static String formatFileSize(long size, boolean isInteger) {
DecimalFormat df = isInteger ? fileIntegerFormat : fileDecimalFormat;
String fileSizeString = “0M”;
if (size < 1024 && size > 0) {
fileSizeString = df.format((double) size) + “B”;
} else if (size < 1024 * 1024) {
fileSizeString = df.format((double) size / 1024) + “K”;
} else if (size < 1024 * 1024 * 1024) {
fileSizeString = df.format((double) size / (1024 * 1024)) + “M”;
} else {
fileSizeString = df.format((double) size / (1024 * 1024 * 1024)) + “G”;
}
return fileSizeString;
}
}
SD卡热插拔监听
//初始化receiver
protected void onResume()
{
super.onResume();
IntentFilter intentFilter = new IntentFilter(
Intent.ACTION_MEDIA_MOUNTED);
intentFilter.addAction(Intent.ACTION_MEDIA_UNMOUNTED);
intentFilter.addAction(Intent.ACTION_MEDIA_EJECT);
intentFilter.addDataScheme(“file”);
// install an intent filter to receive SD card related events.
mReceiver = new BroadcastReceiver()
{
public void onReceive(Context arg0, Intent arg1)
{
onReceiveSdCardBroadCast(arg1);
}
};
registerReceiver(mReceiver, intentFilter);