Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android設備內存和SD卡操作工具類

Android設備內存和SD卡操作工具類

編輯:關於Android編程

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);
	}
	
	
	
	//內存清理
	//注意權限:
	//
	public static void cleanMemory(Context context){
		System.out.println("---> 清理前可用內存:"+getAvailMemory(context)+"MB");
		ActivityManager activityManager=(ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
		RunningAppProcessInfo runningAppProcessInfo=null;
		List  runningAppProcessInfoList= activityManager.getRunningAppProcesses();
		//List 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+");
			//獲得系統總內存,單位KB
			totalMemory = 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;
		}
	}
}

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved