Android设备内存和SD卡操作工具类

来源:互联网 发布:数据分析统计工具 编辑:程序博客网 时间:2024/05/24 04:41
package cc.c;import java.io.File;import java.util.List;import android.os.StatFs;import java.io.FileReader;import java.io.IOException;import java.io.BufferedReader;import android.os.Environment;import android.content.Context;import android.app.ActivityManager;import android.app.ActivityManager.MemoryInfo;import android.app.ActivityManager.RunningAppProcessInfo;public class StorageUtil {private static final int ERROR = -1;public static int save_dir = 1;//判断是否已经安装SD卡public static boolean isSDCardExist() {return android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED);}//内存清理//注意权限://<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />public static void cleanMemory(Context context){System.out.println("---> 清理前可用内存:"+getAvailMemory(context)+"MB");ActivityManager activityManager=(ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);RunningAppProcessInfo runningAppProcessInfo=null;List<RunningAppProcessInfo>  runningAppProcessInfoList= activityManager.getRunningAppProcesses();//List<ActivityManager.RunningServiceInfo> serviceInfos = mActivityManager.getRunningServices(100);if (runningAppProcessInfoList != null) {for (int i = 0; i < runningAppProcessInfoList.size(); ++i) {runningAppProcessInfo= runningAppProcessInfoList.get(i);// 一般数值大于RunningAppProcessInfo.IMPORTANCE_SERVICE// 的进程即为长时间未使用进程或者空进程// 一般数值大于RunningAppProcessInfo.IMPORTANCE_VISIBLE// 的进程都是非可见进程,即在后台运行if (runningAppProcessInfo.importance > RunningAppProcessInfo.IMPORTANCE_VISIBLE) {String[] pkgList = runningAppProcessInfo.pkgList;for (int j = 0; j < pkgList.length; ++j) {System.out.println("===> 正在清理:"+pkgList[j]);activityManager.killBackgroundProcesses(pkgList[j]);}}}}System.out.println("---> 清理后可用内存:"+getAvailMemory(context)+"MB");}//获取内存总大小public static long getTotalMemory() {//系统的内存信息文件String filePath = "/proc/meminfo";String lineString;String[] stringArray;long totalMemory = 0;try {FileReader fileReader = new FileReader(filePath);BufferedReader bufferedReader = new BufferedReader(fileReader,1024 * 8);//读取meminfo第一行,获取系统总内存大小lineString = bufferedReader.readLine();//按照空格拆分stringArray = lineString.split("\\s+");//获得系统总内存,单位KBtotalMemory = Integer.valueOf(stringArray[1]).intValue();bufferedReader.close();} catch (IOException e) {}return totalMemory / 1024;}//获取可用内存大小public static long getAvailMemory(Context context) {ActivityManager activityManager=(ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);MemoryInfo memoryInfo = new MemoryInfo();activityManager.getMemoryInfo(memoryInfo);return memoryInfo.availMem / (1024 * 1024);}//SD卡剩余空间public static long getAvailableExternalMemorySize() {if (isSDCardExist()) {File path = Environment.getExternalStorageDirectory();StatFs stat = new StatFs(path.getPath());long blockSize = stat.getBlockSize();long availableBlocks = stat.getAvailableBlocks();return availableBlocks * blockSize;} else {return ERROR;}}//SD卡总空间public static long getTotalExternalMemorySize() {if (isSDCardExist()) {File path = Environment.getExternalStorageDirectory();StatFs stat = new StatFs(path.getPath());long blockSize = stat.getBlockSize();long totalBlocks = stat.getBlockCount();return totalBlocks * blockSize;} else {return ERROR;}}//判断SD卡下external_sd文件夹的总大小public static long getTotalExternal_SDMemorySize() {if (isSDCardExist()) {File path = Environment.getExternalStorageDirectory();File externalSD = new File(path.getPath() + "/external_sd");if (externalSD.exists() && externalSD.isDirectory()) {StatFs stat = new StatFs(path.getPath() + "/external_sd");long blockSize = stat.getBlockSize();long totalBlocks = stat.getBlockCount();if (getTotalExternalMemorySize() != -1&& getTotalExternalMemorySize() != totalBlocks* blockSize) {return totalBlocks * blockSize;} else {return ERROR;}} else {return ERROR;}} else {return ERROR;}}//判断SD卡下external_sd文件夹的可用大小public static long getAvailableExternal_SDMemorySize() {if (isSDCardExist()) {File path = Environment.getExternalStorageDirectory();File externalSD = new File(path.getPath() + "/external_sd");if (externalSD.exists() && externalSD.isDirectory()) {StatFs stat = new StatFs(path.getPath() + "/external_sd");long blockSize = stat.getBlockSize();long availableBlocks = stat.getAvailableBlocks();if (getAvailableExternalMemorySize() != -1&& getAvailableExternalMemorySize() != availableBlocks* blockSize) {return availableBlocks * blockSize;} else {return ERROR;}} else {return ERROR;}} else {return ERROR;}}}

2 0
原创粉丝点击