对于手机来说,每个软件在安装时,都会在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缓存的更多相关文章

  1. Android学习笔记_58_清除手机应用程序缓存

    通过查看手机设置(setting)源代码,发现它里面获取应用大小和缓存大小是通过PackageManager里面的getPackageSizeInfo方法.然而此方法时私有的,因此通过反射调用此方法. ...

  2. 【转】 Pro Android学习笔记(七五):HTTP服务(9):DownloadManager

    目录(?)[-] 小例子 保存在哪里下载文件信息设置和读取 查看下载状态和取消下载 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件,转载须注明出处:http://blog.csd ...

  3. 【转】 Pro Android学习笔记(七七):服务(2):Local Service

    目录(?)[-] Local service代码 调用Local ServiceLocal Service client代码 AndroidManifestxml定义Serviceacitivty的l ...

  4. Android学习笔记进阶18 之画图并保存图片到本地

    1.首先创建一个Bitmap图片,并指定大小:   2.在该图片上创建一个新的画布Canvas,然后在画布上绘制,并保存即可:   3.需要保存的目录File,注意如果写的目录如“/sdcard/so ...

  5. Android学习笔记进阶18之画图并保存图片到本地

    1.首先创建一个Bitmap图片,并指定大小:   2.在该图片上创建一个新的画布Canvas,然后在画布上绘制,并保存即可:   3.需要保存的目录File,注意如果写的目录如“/sdcard/so ...

  6. Android 学习笔记之Volley(七)实现Json数据加载和解析...

    学习内容: 1.使用Volley实现异步加载Json数据...   Volley的第二大请求就是通过发送请求异步实现Json数据信息的加载,加载Json数据有两种方式,一种是通过获取Json对象,然后 ...

  7. Android学习笔记进阶之在图片上涂鸦(能清屏)

    Android学习笔记进阶之在图片上涂鸦(能清屏) 2013-11-19 10:52 117人阅读 评论(0) 收藏 举报 HandWritingActivity.java package xiaos ...

  8. android学习笔记36——使用原始XML文件

    XML文件 android中使用XML文件,需要开发者手动创建res/xml文件夹. 实例如下: book.xml==> <?xml version="1.0" enc ...

  9. Android学习笔记之JSON数据解析

    转载:Android学习笔记44:JSON数据解析 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为Web应用开发提供了一种 ...

随机推荐

  1. Java面试题搜集

    这里是一些Java面试题,从"程序员小灰"公众号转载过来,备用. 项目介绍 明确项目是做什么的 明确项目的价值.(为什么做这个项目,它解决了用户什么痛点,它带来什么价值?) 明确项 ...

  2. 转-------CNN图像相似度匹配 2-channel network

    基于2-channel  network的图片相似度判别 原文地址:http://blog.csdn.net/hjimce/article/details/50098483 作者:hjimce 一.相 ...

  3. centos系统为php安装memcached扩展

    1. 通过yum安装 yum -y install memcached #安装完成后执行: memcached -h #出现memcached帮助信息说明安装成功 2. 加入启动服务 chkconfi ...

  4. php+editplus构建php调试环境

    配置Editplus的PHP调试环境 1. php手册 1.1 打开Editplus进入菜单 [Tools] -> [Configure User Tools...]. 1.2 点击按钮 [Ad ...

  5. FZU 2214 ——Knapsack problem——————【01背包的超大背包】

    2214 Knapsack problem Accept: 6    Submit: 9Time Limit: 3000 mSec    Memory Limit : 32768 KB  Proble ...

  6. Git使用教程,感觉比较全,所以【转载】

    一:Git是什么? Git是目前世界上最先进的分布式版本控制系统. 二:SVN与Git的最主要的区别? SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以 ...

  7. win10的xbox下载应用或者游戏时,出现0x80070422和0x80073D0A的解决办法

    这个错误:0x80070422是因为关闭了windows update这个服务导致的 这个错误:0x80073D0A是因为关闭了windows firewall这个服务导致的 具体操作: cmd下se ...

  8. javaSE练习1——变量和运算符

    一.已知a,b均是整型变量,写出将a,b两个变量中的值互换的程序.(知识点:变量和运算符综合应用): package com.test; public class t01 { public stati ...

  9. Facade模式实现文件上传(Flash+HTML5)

    一.前言 确定了渐进式增强的上传方式,接下来我们需要将上传功能从具体的业务逻辑中剥离出来,作为公共组件供业务层调用.这就要求我们必须对业务层隐藏上传细节,只暴露统一的上传API.这时候大家是不是跟我一 ...

  10. 51nod 1597 有限背包计数问题 (背包 分块)

    题意 题目链接 Sol 不会做啊AAA.. 暴力上肯定是不行的,考虑根号分组 设\(m = \sqrt{n}\) 对于前\(m\)个直接暴力,利用单调队列优化多重背包的思想,按\(\% i\)分组一下 ...