项目有一个需求,就是我们在apk安装后就删除sb 卡里的apk安装包。我理了一下思路,
1.遍历sb卡,查找出所有带“.apk”路径。
2.再提取apk它的包名和现在运行包名对比。包名对上就删除。
3.因为遍历sb卡时间太长,要用线程方法。
new Thread(){
@Override
public void run() {
try {
fileName = ".apk";
FileHelper fileHelper = new FileHelper();
List<File> fileList = fileHelper.findFile(fileName); //file为APK整条路径
Context con=Update.this;
PackageInfo info = Update.this.getPackageManager().getPackageInfo(con.getPackageName(), 0);
String packageNames = info.packageName; //得到正在运行的APK的包名
for (int k=0;k<fileList.size();k++)
{
File file=fileList.get(k);
String spName=getApkPackName(file.getPath());
if(spName!=null && file!=null && file.isFile() && file.exists())
{
if(spName.equals(packageNames))
{
file.delete();
}
}
}
}catch (Exception e) {
}
}}.start();
private String getApkPackName(String path) {
PackageManager pm = Update.this.getPackageManager();
PackageInfo info = pm.getPackageArchiveInfo(p ath,
PackageManager.GET_ACTIVITIES);
if (info != null) {
ApplicationInfo appInfo = info.applicationInfo;
return appInfo.packageName;
}
return null;
}
fileHelper类
public List<File> findFile(String fileName) {
File file = Environment.getExternalStorageDirectory(); //获取sd卡目录
File[] files = file.listFiles();
reFiles =new ArrayList<File>();
readFile(files,fileName);
return reFiles;
}
public void readFile( File[] files,String fileName){
if(files!=null && files.length>0){ //遍历文件夹
for(int i=0;i<files.length;i++){
if(files[i].isDirectory()){
readFile(files[i].listFiles(),fileName);
}else{
if(files[i].getName().toLowerCase().endsWith(fileName)) //比较
{
reFiles.add(files[i]);
}
}
}
}