我正在做一个Android应用程序,需要列出所有已安装的缓存大小和安装的应用程序。应用用户数据大小。现在我想清除所有已安装应用程序的数据(缓存和用户数据)。下面是我尝试过的代码。
它没有清算数据。当我转到Settings -> Applications -> Manage Applications -> Your Application -> Size
时仍然显示为数据&缓存。如何删除所有已安装应用程序的未使用数据。感谢。
我的代码:
...
public static void trimCache(Context context) {
try {
File dir = context.getCacheDir();
if (dir != null && dir.isDirectory()) {
deleteDir(dir);
}
} catch (Exception e) {
// TODO: handle exception
}
}
public void clearApplicationData() {
File cache = getCacheDir();
File appDir = new File(cache.getParent());
if (appDir.exists()) {
String[] children = appDir.list();
for (String s : children) {
// if (!s.equals("lib")) {
deleteDir(new File(appDir, s));
Log.i("TAG", "**************** File /data/data/APP_PACKAGE/" + s + " DELETED *******************");
// }
}
}
}
public static boolean deleteDir(File dir) {
if (dir != null && dir.isDirectory()) {
String[] children = dir.list();
for (int i = 0; i < children.length; i++) {
boolean success = deleteDir(new File(dir, children[i]));
if (!success) {
return false;
}
}
}
// The directory is now empty so delete it
return dir.delete();
}
private void showProgress(String message) {
pd = new ProgressDialog(this);
pd.setIcon(R.drawable.ic_launcher);
pd.setTitle("Please Wait...");
pd.setMessage(message);
pd.setCancelable(false);
pd.show();
}
long packageSize = 0, size = 0;
AppDetails cAppDetails;
public ArrayList<PackageInfoStruct> res;
private void getpackageSize() {
PACK_SIZE.clear();
DATA_SIZE.clear();
CACHE_SIZE.clear();
mPack = null;
mData = null;
mCache = null;
cAppDetails = new AppDetails(this);
res = cAppDetails.getPackages();
if (res == null)
return;
for (int m = 0; m < res.size(); m++) {
PackageManager pm = getPackageManager();
Method getPackageSizeInfo;
try {
getPackageSizeInfo = pm.getClass().getMethod(
"getPackageSizeInfo", String.class,
IPackageStatsObserver.class);
getPackageSizeInfo.invoke(pm, res.get(m).pname,
new cachePackState());
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
handle.sendEmptyMessage(ALL_PACAGE_SIZE_COMPLETED);
Log.v("Total Cache Size", " " + packageSize);
}
private Handler handle = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case FETCH_PACKAGE_SIZE_COMPLETED:
if (packageSize > 0)
size = (packageSize / 1024000);
lbl_cache_size.setText("Cache Size : " + size + " MB");
break;
case ALL_PACAGE_SIZE_COMPLETED:
MySimpleArrayAdapter adapter = new MySimpleArrayAdapter(
CacheList.this, mPack, mData, mCache);
lv.setAdapter(adapter);
if (null != pd)
if (pd.isShowing())
pd.dismiss();
break;
default:
break;
}
}
};
private class cachePackState extends IPackageStatsObserver.Stub {
@Override
public void onGetStatsCompleted(PackageStats pStats, boolean succeeded)
throws RemoteException {
Log.d("Package Size", pStats.packageName + "");
Log.i("Cache Size", pStats.cacheSize + "");
Log.w("Data Size", pStats.dataSize + "");
packageSize = packageSize + pStats.cacheSize;
Log.v("Total Cache Size", " " + packageSize);
PACK_SIZE.add(pStats.packageName);
DATA_SIZE.add(String.valueOf(pStats.dataSize / 1024000));
CACHE_SIZE.add(String.valueOf(pStats.cacheSize / 1024000));
mPack = PACK_SIZE.toArray(new String[PACK_SIZE.size()]);
mData = DATA_SIZE.toArray(new String[DATA_SIZE.size()]);
mCache = CACHE_SIZE.toArray(new String[CACHE_SIZE.size()]);
handle.sendEmptyMessage(FETCH_PACKAGE_SIZE_COMPLETED);
}
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_get_cacheSize:
size = 0;
packageSize = 0;
showProgress("Calculating Cache Size..!!!");
/**
* You can also use async task
* */
new Thread(new Runnable() {
@Override
public void run() {
getpackageSize();
}
}).start();
break;
case R.id.btn_clear_cache:
clearApplicationData();// Clear User Data
trimCache(CacheList.this);// Clear Cache Data
Toast.makeText(getApplicationContext(), "Successfully Cleared",
Toast.LENGTH_SHORT).show();
}
}