对于手机来说,每个软件在安装时,都会在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. 使用nodejs 访问mongodb

    我使用了 express 框架 目录结构 db.js 文件 function connectionDB(hostname, port) { //注释地方暂时没有使用.是把官方代码照抄下来 // var ...

  2. CF 303C——Minimum Modular——————【剪枝】

    Minimum Modular time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...

  3. nginx 导致文件上传中途中断 Failed to load resource: net::ERR_CONNECTION_RESET

    昨天上传文件出了问题,常常在进度条到一半的时候就终止了.在本地测试的时候倒是没问题,今天早上用花生壳换了另一个域名,在我本地和服务器都测试,却能够上传文件成功.然后就想到了可能是nginx的问题,也在 ...

  4. 2、Angular2 Directive

    1.Attribute directives 2.directive的理解

  5. Java 条件语句

    1.if...else 一个 if 语句包含一个布尔表达式和一条或多条语句. if(布尔表达式) { //如果布尔表达式为true将执行的语句 }else{ //如果布尔表达式为false将执行的语句 ...

  6. vue——组件

    一.组件概念 vue的核心基础就是组件的使用,玩好了组件才能将前面学的基础更好的运用起来.组件的使用更使我们的项目解耦合.更加符合vue的设计思想MVVM. // 定义一个名为 button-coun ...

  7. Celery-------周期任务

    在项目目录例子的基础上进行修改一下celery文件 from celery import Celery from celery.schedules import crontab celery_task ...

  8. SQLAlchemy的使用---M2M多对多关系

    from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, Integer, Stri ...

  9. easyui datagrid 显示 footer

    1.设置 showFooter为true $grid = $dg.datagrid({ // fit: true, //fitColumns: true, // pagination: false, ...

  10. Vue中使用eslint

    .eslintrc.js module.exports = { root: true, parser: 'babel-eslint', "env": { "browser ...