Android设备内存和SD卡操作工具类
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+");
//获得系统总内存,单位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;
}
}
}
Android设备内存和SD卡操作工具类的更多相关文章
- android开发SD卡工具类(一)
SD卡工具类整理: package com.gzcivil.utils; import java.io.File; import java.io.FileInputStream; import jav ...
- Android学习笔记-获取手机内存,SD卡存储空间。
前面介绍到如何保存数据到手机内存或者SD卡,但是问题是,在保存以前,我们还需要对他们的空间(可用空间),进行判断,才可以进行后续操作,所以,本节我们就介绍如何获取手机内存以及Sd卡的空间. //这时获 ...
- Android之外部存储(SD卡)
*手机的外部存储空间,这个我们可以理解成电脑的外接移动硬盘,U盘也行.所有的Android设备都有两个文件存储区域:“内部”和“外部”存储器.这两个名称来自早期的Android,当时大多数设备都提供内 ...
- 单元测试+内存、SD卡、SP读写+XmlPullParser
测试: 测试的相关概念 1.根据是否知道源代码分类: 黑盒测试: a - b - c 边值测试 测试逻辑业务 白盒测试: 根据源代码写测试方法 或者 测试用例; 2.根据测试的粒度分类: 方法测试:写 ...
- [android] 保存文件到SD卡
/****************2016年5月4日 更新*****************************/ 知乎:为什么很多Android应用要把文件写到/sdcard目录下而不是写到/d ...
- Android数据存储之SD卡
为了更好的存取应用程序的大文件数据,应用程序需要读. 写SD卡上的文件.SD卡大大扩充手机的存储能力. 操作SD首先要加权限: <!--在SDCard中创建与删除文件权限 --> < ...
- Android中播放本地SD卡中歌曲须要的加入的权限
使用MediaPlayer播放本地Mp3文件时.须要注意的訪问路径的问题以及訪问权限的问题. 1.訪问路径:/storage/emulated/0 此路径即为手机的根路径,能够通过下载ES文件浏览器软 ...
- android 写文件到sd卡问题小记
android 写文件到sd卡问题小记 事情是这样子的.... 这天我开始编写项目调试工具,高大上不?-----其实就是记录实时网络请求和崩溃日志相关等的小工具(此处一个会心的微笑). 然后我是这样写 ...
- Android——SD卡工具类——SDCardUtils.java
package com.xdsjs.save.utils; /** * SD卡相关的辅助类 * Created by xdsjs on 2015/10/13. */ import java.io.Fi ...
随机推荐
- python - 执行父类中的方法
执行父类中的方法: class C1: def f1(self): print('c1.f1') return 123 class C2(C1): def f1(self): #主动执行父类的f1方法 ...
- c#、sql数据库备份还原
1.在项目中添加SQLDmo dll文件引用(SQLDMO(SQL Distributed Management Objects,SQL分布式管理对象)) 2在相应页面加using SQLDMO引用 ...
- 在IIS集成管道中使用OWIN Middleware
在Katana中启用Windows Authorization OWIN的架构: Host 管理OWIN pipeline上运行的进程 Server 打开一个network socket,,监听请求 ...
- SQL数据库注入防范 ASP.NET Globle警告
在项目中的Global.asax页面代码中加下面的代码,就可以有效的防范简单的SQL注入. protected void Application_BeginRequest(Object sender, ...
- Csharp 高级编程 C7.1.2
第七章 代理(1) 一.代理要声明 二.代理使用步骤 声明代理 初始化代理(使用 实例的方法名 作为参数) 使用代理 代码示例: /*C7.1.2*/ using System; using Syst ...
- AngularJs练习Demo7
@{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport&quo ...
- oracle常用自定义函数集合
1.Oracle 判断值是否为数字的函数CREATE OR REPLACE FUNCTION ISNUMBER(MyStr VARCHAR2) RETURN NUMBERIS STR VARCHAR ...
- IOS网络开发实战(一)
1 局域网群聊软件 1.1 问题 UDP协议将独立的数据包从一台计算机传输到另外一台计算机,但是并不保证接受方能够接收到该数据包,也不保证接收方所接收到的数据和发送方所发送的数据在内容和顺序上是完 ...
- Private Members in JavaScript
Private Members in JavaScript Douglas Crockford www.crockford.com JavaScript is the world's most mis ...
- css实现超连接按钮形式显示
<html> <head> <meta http-equiv="Content-Type" content="text/html; char ...