Android学习笔记_59_清除sdcard缓存
对于手机来说,每个软件在安装时,都会在sdcard上创建一个目录,用于缓存文件。市场上针对这些软件,统一了它的sdcard上的目录,将缓存目录存放到数据库中。如果要清理,可以根据当前应用包的名称,到数据库去查询缓存路径,如果
到再进行递归删除它下的文件。
public class DemoActivity extends Activity {
private TextView tv;
private ProgressBar pb;
private SQLiteDatabase db;
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
String text = (String) msg.obj;
tv.setText(text);
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv = (TextView) this.findViewById(R.id.tv);
pb = (ProgressBar) this.findViewById(R.id.progressBar1);
// 判断手机内存里面是否有数据库存在
File file = new File("/data/data/cn.itcast.clear/files/clearpath.db");
if (!file.exists()) {
copyfile();
}
// 文件写到哪里了?
// data/data/cn.itcast.clear/files/name
}
public void start(View view) {
db = SQLiteDatabase.openDatabase("/data/data/cn.itcast.clear/files/clearpath.db", null, SQLiteDatabase.OPEN_READONLY);
new Thread(){
@Override
public void run() {
List<PackageInfo> packinfos = getPackageManager().getInstalledPackages(0);
pb.setMax(packinfos.size());// 设置进度条的最大条目个数
int total=0;
for(PackageInfo info : packinfos){
String packname = info.packageName;
Cursor curosr = db.rawQuery("select filepath from softdetail where apkname=?", new String[]{packname});
if(curosr.moveToFirst()){
String path = curosr.getString(0);
System.out.println("清除"+packname+"sd卡缓存"+path);
File file = new File(Environment.getExternalStorageDirectory(),path);
deleteDir(file);
try {
sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
total++;
pb.setProgress(total);
curosr.close();
Message msg = Message.obtain();
msg.obj = "清除"+packname;
handler.sendMessage(msg);
}
Message msg = Message.obtain();
msg.obj = "清除完毕";
handler.sendMessage(msg);
db.close();
}
}.start();
}
private void copyfile() {
try {
InputStream is = getClass().getClassLoader().getResourceAsStream(
"clearpath.db");
OutputStream fos = this.openFileOutput("clearpath.db", MODE_PRIVATE);
byte[] buffer = new byte[1024];
int len = 0;
while ((len = is.read(buffer)) != -1) {
fos.write(buffer, 0, len);
}
fos.flush();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
//递归删除缓存文件夹下的文件
private void deleteDir(File file){
if(file.isDirectory()){
File[] files = file.listFiles();
for(int i=0;i<files.length;i++){
deleteDir(file);
}
}else{
file.delete();
}
}
}
Android学习笔记_59_清除sdcard缓存的更多相关文章
- Android学习笔记_58_清除手机应用程序缓存
通过查看手机设置(setting)源代码,发现它里面获取应用大小和缓存大小是通过PackageManager里面的getPackageSizeInfo方法.然而此方法时私有的,因此通过反射调用此方法. ...
- 【转】 Pro Android学习笔记(七五):HTTP服务(9):DownloadManager
目录(?)[-] 小例子 保存在哪里下载文件信息设置和读取 查看下载状态和取消下载 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件,转载须注明出处:http://blog.csd ...
- 【转】 Pro Android学习笔记(七七):服务(2):Local Service
目录(?)[-] Local service代码 调用Local ServiceLocal Service client代码 AndroidManifestxml定义Serviceacitivty的l ...
- Android学习笔记进阶18 之画图并保存图片到本地
1.首先创建一个Bitmap图片,并指定大小: 2.在该图片上创建一个新的画布Canvas,然后在画布上绘制,并保存即可: 3.需要保存的目录File,注意如果写的目录如“/sdcard/so ...
- Android学习笔记进阶18之画图并保存图片到本地
1.首先创建一个Bitmap图片,并指定大小: 2.在该图片上创建一个新的画布Canvas,然后在画布上绘制,并保存即可: 3.需要保存的目录File,注意如果写的目录如“/sdcard/so ...
- Android 学习笔记之Volley(七)实现Json数据加载和解析...
学习内容: 1.使用Volley实现异步加载Json数据... Volley的第二大请求就是通过发送请求异步实现Json数据信息的加载,加载Json数据有两种方式,一种是通过获取Json对象,然后 ...
- Android学习笔记进阶之在图片上涂鸦(能清屏)
Android学习笔记进阶之在图片上涂鸦(能清屏) 2013-11-19 10:52 117人阅读 评论(0) 收藏 举报 HandWritingActivity.java package xiaos ...
- android学习笔记36——使用原始XML文件
XML文件 android中使用XML文件,需要开发者手动创建res/xml文件夹. 实例如下: book.xml==> <?xml version="1.0" enc ...
- Android学习笔记之JSON数据解析
转载:Android学习笔记44:JSON数据解析 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为Web应用开发提供了一种 ...
随机推荐
- Linux下安装配置MongoDB数据库
说明: 操作系统:CentOS 5.X 64位 IP地址:192.168.21.130 实现目的: 安装配置MongoDB数据库 具体操作: 一.关闭SElinux.配置防火墙 1.vi /etc/s ...
- swpuctf-web部分学习总结
1.用优惠码 买个 X ? (1)第一步: 这道题第一步主要知道利用php的随机种子数泄露以后就可以利用该种子数来预测序列,而在题目中会返回15位的优惠码,但是必须要24位的优惠码,因此要根据15位的 ...
- Session&Cookie 简介及使用
Cookie cookie 是存储于访问者的计算机中的变量.每当同一台计算机通过浏览器请求某个页面时,就会发送这个 cookie.你可以使用 JavaScript 或其它语言来创建和取回 cookie ...
- hdu 3265 矩形剪块面积并
http://acm.hust.edu.cn/vjudge/problem/10769 给n张海报,在每张海报上剪掉一个矩形,求面积并 把剪块的海报分成四个矩形,就是普通的求面积并问题了 #inclu ...
- VS2012 无法启动 IIS Express Web
用记事本打开项目的.csproj文件,定位到<WebProjectProperties>,把关于IIS的配置<DevelopmentServerPort>.<Develo ...
- drupal 基础理论
第3章 Drupal 的基本概念 添加新评论 浏览 6795 次 Drupal的基本概念主要包括节点.内容类型.模块.主题和分类等.只有对这些概念有了足够的了解,方能灵活的构建网站.本章将对这些基本概 ...
- php有经纬度计算距离
/** * @desc 根据两点间的经纬度计算距离 * @param float $lat 纬度值 * @param float $lng 经度值 */ function getDistanc ...
- css控制文本单行或者多行溢出显示为省略号...
p:first-child { background-color: pink; width: 150px; line-height: 28px; font-size: 20px; overflow: ...
- 16_Queue_利用wait()和notify()编写一个阻塞队列
[线程间通信概念] 线程是操作系统中独立的个体,但这些个体如果不经过特殊的处理就不能成为一个整体,线程间的通信就成为整体必用方式之一.当线程存在通信指挥,线程间的交互性会更强大,在提高CPU利用率的同 ...
- Siebel 集成中的“发布-订阅”与“阅读”
将 Siebel 应用程序中存储的数据提供给企业中的其他应用程序时,通常需要遵循以下两种基本模式之一: 发布-订阅 阅读 “发布-订阅”是一种机制,根据该机制,一个系统(发布者)将更改或更新的数据提供 ...