今天写一个BroadCaseReceiver在项目中的使用,BroadCaseReceiver删除文件夹中所有文件的操作。
首先在你的Activity中注册你的BroadcaseReceiver,在android7.0之后,BroadCaseReceiver静态注册是收不到广播的,别踩坑!
public BRClearUeLog clearUeLog;
if (clearUeLog == null) {
clearUeLog = new BRClearUeLog();
IntentFilter intentFilter = new IntentFilter();
//Action是你给你的BroadcaseReceiver起的标识码,俗称tag
intentFilter.addAction("com.android.clearUeLog");
registerReceiver(clearUeLog, intentFilter);
//这里可以简写为registerReceiver(clearUeLog , new IntentFilter("com.android.clearUeLog"));
}
当然有注册就有反注册,在你的Activity结束的时候进行反注册,优化内存空间,避免内存溢出
if (clearUeLog != null) {
unregisterReceiver(clearUeLog);
clearUeLog = null;
}
然后是Activity的调用:
Intent intent = new Intent();
//与上面的Action所对应
intent.setAction("com.android.clearUeLog");
//如果传输数据可以用此方式
//intent.putExtra("message","我是数据");
sendBroadcast(intent);
最后大招来了,BroadcaseReceiver正文:
/**
* 删除adbtestcase文件夹下的所有文件,并反馈是否清理成功与否
* @author Android
*
*/
public class BRClearUeLog extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
//如果有传输的Intent数据intent.getStringExtra("message")取出
String path="删除文件的路径";
deleteDir(path);
isNull(path);
}
//检查adbtestcase文件夹下是否为空
private void isNull(String path) {
// TODO Auto-generated method stub
File file = new File(path);
File[] listFiles = file.listFiles();
if (listFiles.length > 0) {
//文件夹下有文件
ConfigTest.currentCmdState="清理失败";
} else {
// 文件夹下没有文件
ConfigTest.currentCmdState="清理成功";
}
}
//删除文件夹和文件夹里面的文件
private void deleteDir(String pPath) {
File dir = new File(pPath);
deleteDirWihtFile(dir);
}
private void deleteDirWihtFile(File dir) {
if (dir == null || !dir.exists() || !dir.isDirectory()) {
return;
} else {
File[] files = dir.listFiles();
Log.e("motejia", "deleteDirWihtFile: ==============="+files.length );
for (File file : dir.listFiles()) {
if (file.isFile()) {
file.delete(); // 删除所有文件
} else if (file.isDirectory()) {
deleteDirWihtFile(file); // 递规的方式删除文件夹
file.delete();
}
}
// dir.delete();// 删除目录本身
}
}
}